首页 文章

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

提问于
浏览
5

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

8 回答

  • 1

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

  • 1

    此URL对此异常的根本原因有更深入的解释

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

  • 0

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

    我们最终在war的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包

    希望这可以帮助 .

  • 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抛出到 endpoints .

  • 1

    这是一般例外; "Unable to create JAXBContext"

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

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

    [ServiceWSDL_URL_mesajUzunlu ğ u] [1]

    我收到此错误,因为在我的映射中有一个非ASCII字符 . 'ğ' . 不幸的是,即使是认真的提供商也提供使用http://tempuri.org作为命名空间的Web服务 . 正确的做法是使用服务 endpoints 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定义了一个用于从XML文档读取和写入Java对象的API . 与SAX和DOM不同,我们不需要了解XML解析技术

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

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

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

  • -2

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

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

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

  • 0

    对于不同的Java项目,在升级到Java 7之后,我也经历过

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

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

相关问题