javax.xml.ws.WebServiceException:无法创建JAXBContext

时间:2011-09-12 03:53:01

标签: web-services jsp java-metro-framework

我有3个使用netbean 6.9

创建的Web服务

当我在工作中使用计算机时,它运行顺畅,没有错误。但是,当我将netbean项目复制到我家的计算机时,它运行时出现错误,如下所示。

 SEVERE: WSSERVLET11: failed to parse runtime descriptor: javax.xml.ws.WebServiceException: Unable to create JAXBContext
javax.xml.ws.WebServiceException: Unable to create JAXBContext
        at com.sun.xml.ws.model.AbstractSEIModelImpl.createJAXBContext(AbstractSEIModelImpl.java:166)
        at com.sun.xml.ws.model.AbstractSEIModelImpl.postProcess(AbstractSEIModelImpl.java:94)
        at com.sun.xml.ws.model.RuntimeModeler.buildRuntimeModel(RuntimeModeler.java:258)
        at com.sun.xml.ws.server.EndpointFactory.createSEIModel(EndpointFactory.java:338)
        at com.sun.xml.ws.server.EndpointFactory.createEndpoint(EndpointFactory.java:201)
        at com.sun.xml.ws.api.server.WSEndpoint.create(WSEndpoint.java:505)
        at com.sun.xml.ws.transport.http.DeploymentDescriptorParser.parseAdapters(DeploymentDescriptorParser.java:253)
        at com.sun.xml.ws.transport.http.DeploymentDescriptorParser.parse(DeploymentDescriptorParser.java:147)
        at com.sun.xml.ws.transport.http.servlet.WSServletContextListener.contextInitialized(WSServletContextListener.java:124)
        at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3972)
        at org.apache.catalina.core.StandardContext.start(StandardContext.java:4467)
        at org.apache.catalina.manager.ManagerServlet.start(ManagerServlet.java:1276)
        at org.apache.catalina.manager.ManagerServlet.doGet(ManagerServlet.java:378)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:199)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:558)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
        at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:859)
        at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579)
        at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1555)
        at java.lang.Thread.run(Thread.java:722)
Caused by: java.security.PrivilegedActionException: com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions
java.lang.StackTraceElement does not have a no-arg default constructor.
        this problem is related to the following location:
                at java.lang.StackTraceElement
                at public java.lang.StackTraceElement[] java.lang.Throwable.getStackTrace()
                at java.lang.Throwable
                at public java.lang.Throwable[] com.factbook.webservice.jaxws.ExceptionBean.suppressed
                at com.factbook.webservice.jaxws.ExceptionBean

        at java.security.AccessController.doPrivileged(Native Method)
        at com.sun.xml.ws.model.AbstractSEIModelImpl.createJAXBContext(AbstractSEIModelImpl.java:153)
        ... 30 more
Caused by: com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions
java.lang.StackTraceElement does not have a no-arg default constructor.
        this problem is related to the following location:
                at java.lang.StackTraceElement
                at public java.lang.StackTraceElement[] java.lang.Throwable.getStackTrace()
                at java.lang.Throwable
                at public java.lang.Throwable[] com.factbook.webservice.jaxws.ExceptionBean.suppressed
                at com.factbook.webservice.jaxws.ExceptionBean

        at com.sun.xml.bind.v2.runtime.IllegalAnnotationsException$Builder.check(IllegalAnnotationsException.java:102)
        at com.sun.xml.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:472)
        at com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:302)
        at com.sun.xml.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.java:1140)
        at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:154)
        at com.sun.xml.bind.api.JAXBRIContext.newInstance(JAXBRIContext.java:106)
        at com.sun.xml.ws.developer.JAXBContextFactory$1.createJAXBContext(JAXBContextFactory.java:109)
        at com.sun.xml.ws.model.AbstractSEIModelImpl$1.run(AbstractSEIModelImpl.java:161)
        at com.sun.xml.ws.model.AbstractSEIModelImpl$1.run(AbstractSEIModelImpl.java:154)
        ... 32 more

7 个答案:

答案 0 :(得分:1)

我在Java 7(Java 1.7)上遇到过这个问题。通过从类路径中删除webservices-api-2.0.1.jar来解决它。

答案 1 :(得分:1)

此网址更深入地解释了此异常的根本原因

https://issues.apache.org/jira/browse/CXF-4754

答案 2 :(得分:1)

本质上,应用程序期望的webservices jar版本与类加载器加载的内容存在冲突。我们遇到了类似的问题,即应用程序可以在Tomcat中运行但在Weblogic中出错

我们最终在战争的WEB-INF文件夹中创建了一个weblogic.xml,其中包含以下容器描述符

**<prefer-application-packages>
    <package-name>javax.xml.ws.*</package-name>
    <package-name>com.sun.xml.ws</package-name>
</prefer-application-packages>**

正如您所看到的,我们要求weblogic遵守应用程序附带的webservices包,并忽略weblogic包的weblogic版本

希望这有帮助。

答案 3 :(得分:1)

我有同样的问题,但我只是要删除异常,因为我抛出了一个非通用的异常,如JAXBException,然后创建一个返回自定义异常的EndPoint:

@WebService
public class MyEndPoint {




    @WebMethod
    public String myOperation(String xmlString) throws MyException {
        ...
        return null;
    }



}

我的Exception类是这样的:

public class MyException extends Exception {

    private String message;

    public String getMessage() {
        return super.getMessage();
    }

    public MyException(String message) {
        super(message);
    }

}

在我的服务接口Implements中,我捕获所有Specifics Exception并将MyException抛出到端点。

答案 4 :(得分:0)

这是一般例外; “无法创建JAXBContext”

如果映射有问题,则在将Java对象转换为XML时会产生JAXB错误,反之亦然。

  

方法 mesajUzunlu » u()生成客户端包含方法和错误   映射。除此之外 tempuri.org targetNamespace完全破坏了其他   使用此命名空间的服务   @(“mesajUzunl u \ u011f 你好”)这个字符串在ununicode表示中与ğ不匹配,我们cat无法创建JAXBContext错误

[ServiceWSDL_URL_mesajUzunlu <强“G ü] [1]

我收到此错误,因为在我的映射中存在非ASCII字符。 'ğ'。 不幸的是,即使是认真的提供者也提供使用http://tempuri.org作为命名空间的Web服务。正确的做法是使用服务端点URL。无论如何。这会为Web客户端代理类生成 org.tempuri 包。当存在多个使用Web服务提供者的tempuri.org并且您相应地生成您的类时,您的jar将被编译为org.tempuri以用于多个服务。然后会发生什么?即使这种非ascii字符仅针对特定服务发生,我的所有客户都开始惊讶地发出此错误。我通过仔细研究Call Stack来发现真正的原因。我不明白为什么这些严肃的组织,如部委或电信公司使用tempuri.org。

我的建议是寻找非ASCII字符,仔细阅读StackTrace并在编写客户端时考虑org.tempuri。

环境:Java 1.7,没有webservices-api-2.0.1.jar,最新的jaxb-imp.jar

  

JAXB 代表XML绑定的Java架构。它习惯了   将XML转换为java对象,将java对象转换为XML.JAXB定义API   用于从XML文档读取和写入Java对象。不相似   SAX和DOM,我们不需要了解XML解析技术

对于这个问题中的特殊情况,上面的陈述使我们理解了下面的stackTrace元素,有一个错误无法转移给我们。因为Object&lt; - &gt; XML序列化。

  

java.lang.StackTraceElement没有no-arg默认值   构造

唯一要做的就是熟悉堆栈跟踪元素并使用Soap UI类工具进行调查。如果我们是服务的所有者,最好返回serialize-OK元素,例如JSON字符串或自定义XML映射元素。

答案 5 :(得分:0)

如果您的类被另一个项目使用,请更改您的类以实现java.io.Serializable。这解决了我的问题。

答案 6 :(得分:-2)

对于不同的Java项目,升级到Java 7之后,我也遇到了

  

错误:[core] java.lang.StackTraceElement:TypeDefinition必须有一个no-arg构造函数或者用工厂方法注释。

结果证明是一个问题。解决方案是在相应的pom.xml文件中将所有发音版本号1.25替换为1.26。