java - Liberty Profile 上的 Jersey JAXB json

标签 java json jaxb jersey

尝试从自由配置文件服务器对象上的 JAXB 返回 Json 但没有成功。 XML 完美无缺。在依赖树中看不到任何奇怪的东西。

可能有什么问题?

Caused by: java.lang.VerifyError: JVMVRFY027 receiver is incompatible with declaring class; class=org/eclipse/persistence/jaxb/compiler/Generator, method=generateSchemaFiles(Ljava/lang/String;Ljava/util/Map;)Ljava/util/Map;, pc=89
    at org.eclipse.persistence.jaxb.JAXBContext$TypeMappingInfoInput.createContextState(JAXBContext.java:1099)
    at org.eclipse.persistence.jaxb.JAXBContext.<init>(JAXBContext.java:189)
    at org.eclipse.persistence.jaxb.JAXBContextFactory.createContext(JAXBContextFactory.java:165)
    at org.eclipse.persistence.jaxb.JAXBContextFactory.createContext(JAXBContextFactory.java:152)
    at org.eclipse.persistence.jaxb.JAXBContextFactory.createContext(JAXBContextFactory.java:112)
    at org.eclipse.persistence.jaxb.JAXBContextFactory.createContext(JAXBContextFactory.java:102)
    at org.eclipse.persistence.jaxb.rs.MOXyJsonProvider.getJAXBContext(MOXyJsonProvider.java:318)
    at org.eclipse.persistence.jaxb.rs.MOXyJsonProvider.getJAXBContext(MOXyJsonProvider.java:337)
    at org.eclipse.persistence.jaxb.rs.MOXyJsonProvider.isWriteable(MOXyJsonProvider.java:580)
    at org.glassfish.jersey.moxy.json.internal.ConfigurableMoxyJsonProvider.isWriteable(ConfigurableMoxyJsonProvider.java:201)
    at org.glassfish.jersey.message.internal.MessageBodyFactory.isWriteable(MessageBodyFactory.java:1160)
    at org.glassfish.jersey.message.WriterModel.isWriteable(WriterModel.java:86)
    at org.glassfish.jersey.message.internal.MessageBodyFactory._getMessageBodyWriter(MessageBodyFactory.java:798)
    at org.glassfish.jersey.message.internal.MessageBodyFactory.getMessageBodyWriter(MessageBodyFactory.java:756)
    at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.aroundWriteTo(WriterInterceptorExecutor.java:241)
    at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162)
    at org.glassfish.jersey.server.internal.JsonWithPaddingInterceptor.aroundWriteTo(JsonWithPaddingInterceptor.java:106)
    at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162)
    at org.glassfish.jersey.server.internal.MappableExceptionWrapperInterceptor.aroundWriteTo(MappableExceptionWrapperInterceptor.java:86)
    at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162)
    at org.glassfish.jersey.message.internal.MessageBodyFactory.writeTo(MessageBodyFactory.java:1130)
    at org.glassfish.jersey.server.ServerRuntime$Responder.writeResponse(ServerRuntime.java:711)
    at org.glassfish.jersey.server.ServerRuntime$Responder.processResponse(ServerRuntime.java:444)
    at org.glassfish.jersey.server.ServerRuntime$Responder.process(ServerRuntime.java:434)
    at org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:329)

web.xml

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

    <servlet>
        <servlet-name>Service</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>com.my.services.agent</param-value>
        </init-param>

        <init-param>
            <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
            <param-value>true</param-value>
        </init-param>

        <init-param>
            <!-- With WebSphere, to see the service response in case of errors instead of the
                 Websphere default error page, Jersey has to be configured in this way.
            https://java.net/jira/browse/JERSEY-2521 -->
            <param-name>jersey.config.server.response.setStatusOverSendError</param-name>
            <param-value>true</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Service</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

</web-app>

@XmlRootElement
public class TestObj {
    public String name;
    public int age;

    public TestObj() {
    } // JAXB needs this

    public TestObj(String name) {
        this.name = name;
    }
}

TestResource.java

@GET
@Path("/ex2")
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON, MediaType.TEXT_XML, MediaType.TEXT_HTML})
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON, MediaType.TEXT_XML, MediaType.TEXT_HTML})
public TestObj ex2() {
    return new TestObj("test");
}

pom.xml

<jersey.version>2.22.1</jersey.version>
...
<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
  <version>3.1.0</version>
</dependency>
<dependency>
  <groupId>org.glassfish.jersey.containers</groupId>
  <artifactId>jersey-container-servlet</artifactId>
</dependency>
<dependency>
  <groupId>org.glassfish.jersey.media</groupId>
  <artifactId>jersey-media-moxy</artifactId>
</dependency>

<dependencyManagement>
<dependencies>
  <dependency>
    <groupId>org.glassfish.jersey</groupId>
    <artifactId>jersey-bom</artifactId>
    <version>${jersey.version}</version>
    <type>pom</type>
    <scope>import</scope>
  </dependency>
</dependencies>
</dependencyManagement>

最佳答案

这是通过以下方式修复的:

<dependency>
  <groupId>org.glassfish.jersey.containers</groupId>
  <artifactId>jersey-container-servlet</artifactId>
</dependency>
<dependency>
  <groupId>org.glassfish.jersey.media</groupId>
  <artifactId>jersey-media-json-jackson</artifactId>
  <version>2.22.1</version>
</dependency>

关于java - Liberty Profile 上的 Jersey JAXB json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34860159/

相关文章:

java - ListView 返回相同的项目位置和 ID

java - 从文本文件获取输入并返回 json 字符串的程序

json - 如何使用 Office365 中的对话框 API 将 Json 对象从父级发送到对话框

java - 在 jaxb 中解码时我的异常发生了什么?

Java 对象、引用变量和垃圾回收堆

java - 将变量传递给进程

java - 我正在使用 NotifydataAdapter 但当数据库上的值更改时它不起作用;

javascript - 如何计算 JSON 对象中的值?

datetime - 如何清空 SOAP Web 服务中的日期时间字段?

java - jaxb:枚举列表上的奇怪类转换异常