【问题标题】:javax.xml.ws.WebServiceException: Unable to create JAXBContextjavax.xml.ws.WebServiceException:无法创建 JAXBContext
【发布时间】:2011-09-12 03:53:01
【问题描述】:

我有 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

【问题讨论】:

  • 家里环境一样(如JDK、Netbeas等)?

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


【解决方案1】:

这个网址对这个异常的根本原因有更深入的解释

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

【讨论】:

  • 虽然理论上可以回答这个问题,it would be preferable 在这里包含答案的基本部分,并提供链接以供参考。
【解决方案2】:

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

我们最终在战争的 WEB-INF 文件夹中创建了一个 weblogic.xml,在 container-descriptor 中包含以下内容

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

如您所见,我们要求 weblogic 尊重应用程序附带的 webservices 包,并忽略 webservices 包的 weblogic 版本

希望这会有所帮助。

【讨论】:

    【解决方案3】:

    我遇到了同样的问题,但我只需要删除异常,因为我抛出了像 JAXBException 这样的非通用异常,然后创建一个返回自定义异常的 EndPoint,如下所示:

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

    我的异常类是这样的:

    public class MyException extends Exception {
    
        private String message;
    
        public String getMessage() {
            return super.getMessage();
        }
    
        public MyException(String message) {
            super(message);
        }
    
    }
    

    在我的服务接口实现中,我捕获了所有具体异常并向端点抛出一个 MyException。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        这是一个通用异常; “无法创建 JAXBContext”

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

        method mesajUzunluğu() 产生一个客户端包含的方法和一个错误 映射。除了这个 tempuri.org targetNamespace 完全毁了其他 使用此命名空间的服务。 @("mesajUzunlu\u011fu") 这个字符串在 ğ unicode 表示中与 ğ 不匹配,我们发现无法创建 JAXBContext 错误

        [ServiceWSDL_URL_mesajUzunluğu][1]

        我收到此错误是因为在我的映射中有一个非 ASCII 字符。 'ğ' 。 不幸的是,即使是严肃的提供商也提供使用 http://tempuri.org 作为命名空间的 Web 服务。正确的做法是使用服务端点 URL。反正。这会为 Web 客户端代理类生成 org.tempuri 包。当存在多个使用 Web 服务提供商的 tempuri.org 并且您相应地生成您的类时,您的 jar 将被编译为 org.tempuri 以用于多个服务。那么会发生什么?即使这个非 ascii 字符只出现在一个特定的服务中,我所有的客户都开始出人意料地给出这个错误。我刚刚通过非常仔细地调查调用堆栈发现了真正的原因。我不明白为什么这些严肃的组织,如部委或电信公司使用 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元素,有一个错误不能传递给我们。因为ObjectXML序列化。

        java.lang.StackTraceElement 没有无参数默认值 构造函数。

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

        【讨论】:

          【解决方案6】:

          我也有同样的例外。我的服务类是由 CXF 生成的,当我调用服务方法时,它说“28 个 IllegalAnnotationExceptions 计数”。因为该服务有 14 个方法和 2 个包装类(responseWrapperrequestWrapper)。 问题是我的项目没有Cxf 库引用。只需添加这些(我使用的是 2.7.5 版):

          org.apache.cxf -> 
          cxf-api,
          cxf-tools-common,
          cxf-rt-bindings-soap
          

          【讨论】:

            【解决方案7】:

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

            【讨论】:

            • 欢迎来到 SO。这是一个非常古老的问题,答案已被接受。在我看来,通过实现 java.io.Serializable 来修复在一个环境中工作但不能在另一个环境中工作的应用程序似乎不太可能。
            【解决方案8】:

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

            错误:[core] java.lang.StackTraceElement:TypeDefinition 必须具有无参数构造函数或使用工厂方法进行注释。

            原来是发音有问题。解决方案是将相应 pom.xml 文件中的所有发音版本号 1.25 替换为 1.26。

            【讨论】:

            • 这不是这个问题的答案。
            猜你喜欢
            • 1970-01-01
            • 2019-02-01
            • 2011-11-06
            • 2023-04-06
            • 1970-01-01
            • 1970-01-01
            • 2017-06-11
            • 2014-11-21
            • 1970-01-01
            相关资源
            最近更新 更多