jboss - 在 JBoss EAP 6.1 上使用 EclipseLink MOXy 作为 JAX-WS 的 JAXB 提供者

标签 jboss jaxb jax-ws eclipselink moxy

我正在尝试使用 EclipseLink MOXy 作为 JAXB 提供程序,用于部署在 JBoss EAP 6.1.0.Beta1 应用程序服务器上的 JAX-WS 网络服务。现在我已经实现了 javax.xml.ws.Provider 描述 here并将 jaxb.properties 文件放入包含我的 Provider 实现和 Web 服务中使用的域类的包中。这是此文件的内容:

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory

当我尝试部署包含该服务的网络应用程序时,我在日志中出现以下错误:

@XmlValue is not allowed on a class that derives another class

在我的案例中使用 MOXy 作为 JAXB 提供者的主要原因是能够在子类中使用 @XmlValue 注释。当我尝试使用与使用 MOXy 的测试应用程序中用于 Web 服务的相同类进行解码时,不会发生此错误。此外,堆栈跟踪中没有来自 org.eclipse.persistence 包及其子包的类,只有 com.sun.xml.bind.v2 类。显然,部署 Web 应用程序时不会使用 MOXy。 org.eclipse.persistence 中所有必需的 Maven 工件都在 WAR 文件中:

$ jar tf my-app.war | grep org.eclipse.persistence
WEB-INF/lib/org.eclipse.persistence.antlr-2.5.0.jar
WEB-INF/lib/org.eclipse.persistence.asm-2.5.0.jar
WEB-INF/lib/org.eclipse.persistence.moxy-2.5.0.jar
WEB-INF/lib/org.eclipse.persistence.core-2.5.0.jar 

我做错了什么?据我了解, Provider 在调用 web 服务时在运行时被调用。但是错误发生在部署时。我是否应该重新实现 Provider 之外的东西?

最佳答案

第一步是确保 EclipseLink 库位于正确的位置。您可以尝试直接使用 MOXy API,而不是将 MOXy 配置为 JAXB 提供程序吗?

import org.eclipse.persistence.jaxb.JAXBContext;
import org.eclipse.persistence.jaxb.JAXBContextFactory;

public class Demo {

    public static void main(String[] args) {
        JAXBContext jc = JAXBContextFactory.createContext(new Class[] {Foo.class, Bar.class}), null);
    }

}

关于jboss - 在 JBoss EAP 6.1 上使用 EclipseLink MOXy 作为 JAX-WS 的 JAXB 提供者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17350796/

相关文章:

java - 如何使用 Jaxb 将 xml 转换为 Java 类?

java - JAXB 2.0 验证不起作用

jaxb - JAXB 解码期间发生 InstantiationException(抽象基类,带有 @XmlSeeAlso 具体子类)

java - JAX-WS 拦截运行时异常以进行日志记录

java - WildFly AS 8.0错误: org. hibernate.integrator.spi.Integrator : Provider org. hibernate.envers.event.EnversIntegrator不是子类型

java.lang.NoClassDefFoundError :javax/net/SocketFactory) in Jboss 7. 5

java - 从 Matlab 内部调用 JAX-WS Web 服务

java - 忽略 JAX-WS 客户端中缺少的方法

java - 分析/调试 JBoss AS/Seam 应用程序

java - 如何在 Eclipse 远程调试器中找到有问题的线程?