当前位置: 首页 > 知识库问答 >
问题:

Weblogic 12.1.3 JAX-RS 2球衣多部分

斜光耀
2023-03-14

我有一个服务器Weblogic 12.1.3,带有JAX-RS 2。x作为共享库安装(参见。https://docs.oracle.com/middleware/1213/wls/RESTF/use-jersey20-ri.htm#RESTF297). 该共享库包括例如javax。ws。rs-api-2.0。jar和jersey-media-multipart-2.5.1。jar。

请注意,我不确定我的webapp是否真的在使用这个共享库,或者它正在使用标准的JAX-RS 1. x库。

现在我想上传多部分/表单数据格式的文件,所以我想我需要在我的项目中添加这个依赖项:

    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-multipart</artifactId>
        <version>2.5.1</version>
        <scope>provided</scope>
    </dependency>

但是,部署失败,出现错误:

java.lang.ClassNotFoundException: org.glassfish.jersey.media.multipart.FormDataContentDisposition

所以,我想我可以把自己的图书馆放在我的网络应用程序中:

    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-multipart</artifactId>
        <version>2.5.1</version>
    </dependency>

在第二种情况下,部署失败,并出现以下错误:

java.lang.ClassNotFoundException: org.glassfish.jersey.ExtendedConfig

知道吗?非常感谢。

共有1个答案

卫振
2023-03-14

最后,我终于成功了。我在weblogic.xml和web.xml都缺少配置(我不知道web.xml有必要)。

Weblogic。xml:

<wls:weblogic-web-app xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.9/weblogic-web-app.xsd">
    
    <!-- Questo è per referenzialre la shared library jax-rs 2.x -->
    <wls:library-ref>
        <wls:library-name>jax-rs</wls:library-name>
        <wls:specification-version>2</wls:specification-version>
        <wls:implementation-version>2.5.1</wls:implementation-version>
        <wls:exact-match>false</wls:exact-match>
    </wls:library-ref>
    
    <wls:container-descriptor>
        <wls:prefer-application-packages>
            <!-- apis -->
            <wls:package-name>javax.ws.rs.*</wls:package-name>
            <!-- guava -->
            <wls:package-name>com.google.common.*</wls:package-name>
            <!-- jersey1 providers -->
            <wls:package-name>com.sun.jersey.*</wls:package-name>
            <!-- media providers -->
            <wls:package-name>org.eclipse.persistence.jaxb.rs.*</wls:package-name>
            <wls:package-name>org.codehaus.jackson.jaxrs.*</wls:package-name>
            <!-- wls -->
            <wls:package-name>weblogic.jaxrs.api.client.*</wls:package-name>
            <wls:package-name>weblogic.jaxrs.internal.api.client.*</wls:package-name>
            <wls:package-name>weblogic.jaxrs.dispatch.*</wls:package-name>
            <wls:package-name>weblogic.jaxrs.monitoring.util.*</wls:package-name>
        </wls:prefer-application-packages>
    </wls:container-descriptor>
    <wls:context-root>uploader</wls:context-root>
    
</wls:weblogic-web-app>

Web.xml:

<servlet>
    <servlet-name>JAX-RS</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer
    </servlet-class>
    <init-param>
        <param-name>javax.ws.rs.Application</param-name>
        <param-value>mypackage.jaxrs.JAXRSApplication
        </param-value>
    </init-param>
    <init-param>
        <param-name>jersey.config.server.provider.classnames</param-name>
        <param-value>org.glassfish.jersey.filter.LoggingFilter;org.glassfish.jersey.media.multipart.MultiPartFeature
        </param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>JAX-RS</servlet-name>
    <url-pattern>/v1/*</url-pattern>
</servlet-mapping>

特别注意对MultiPartFeature的引用。

编辑

正如我所想,网络。xml不是必需的。您可以将所有属性放入应用程序类中。以上配置或多或少等同于以下配置

@ApplicationPath("/v1")
public class JAXRSApplication extends Application {

    @Override
    public Map<String, Object> getProperties() {

        Map<String, Object> properties = new HashMap<>();

        properties.put("jersey.config.server.provider.packages", "mypackage");
        properties.put("jersey.config.server.provider.classnames",
                "org.glassfish.jersey.filter.LoggingFilter;org.glassfish.jersey.media.multipart.MultiPartFeature");

        return properties;
    }

}
 类似资料:
  • 我需要在java上开发简单的web服务。我是java技术新手,根据几篇文章,我决定将JAX-RS(Jersey)与嵌入式http服务器(Grizzly2)结合使用,因为它看起来适合构建REST服务,部署似乎很简单。 在我的开发环境中,所有工作都很完美(使用IntllijIdea)。 但当我尝试在测试服务器上部署时,每个请求都返回“500内部错误”(偶数/application.wadl) 简单资源

  • 如spring boot博客所述 我尝试自定义我的对象序列化。 在我的配置中添加了一个新的配置bean之后 当我尝试输出类用户的实例时,json结果不在CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES中 也许我需要在我的Jersey配置中注册一些东西来激活我的自定义obejctMapper配置 谢谢

  • 下面给出依赖关系树。堆栈超过流要求放更多的文本。

  • 我使用Jersey 2.10异常映射器类来处理异常。我想返回错误状态和错误信息的JSON正文。我想得到类似的回应: Jersey没有在响应中发送JSON正文。我得到的是: 如果我将状态代码更改为200,那么我将获得预期的响应正文 请帮我找出这个问题的解决方案。 异常映射器在错误对象中填充错误消息和状态。以下是异常映射程序代码: 这是来自错误对象的代码:

  • 我在WAS 8.0上部署了一个JAX-RS WS应用程序,其中包含一个空的2.4web.xml,这个类扩展了'javax.WS.rs.core.application'和2个资源,它工作得很好。 如何在WAS7.0上部署JAX-RS应用程序而不使用Jersey或任何其他与应用程序服务器相关的类? 谢谢

  • 问题内容: 我如何查看Jersey生成并发送到服务器的实际请求?我在处理特定请求时遇到问题,运行Web服务器的同伴要求查看完整的请求(带有标头等)。 问题答案: 如果您仅使用Jersey客户端API,则LoggingFilter(客户端过滤器)应该可以帮助您: 否则,您可以使用其他LoggingFilter(容器过滤器)再次在服务器上记录请求和响应。