我正在尝试使用 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/