我收到了以下形式
的JAXBException类SomeClass或其任何超类都是这个上下文已知的。
完整堆栈跟踪如下所示:
javax.xml.ws.WebServiceException: javax.xml.bind.JAXBException: class com.myCompany.generatedCode.WebServiceOperationName nor any of its super class is known to this context. at org.apache.axis2.jaxws.ExceptionFactory.createWebServiceException(ExceptionFactory.java:175) at org.apache.axis2.jaxws.ExceptionFactory.makeWebServiceException(ExceptionFactory.java:70) at org.apache.axis2.jaxws.ExceptionFactory.makeWebServiceException(ExceptionFactory.java:128) at org.apache.axis2.jaxws.core.controller.impl.AxisInvocationController.execute(AxisInvocationController.java:586) at org.apache.axis2.jaxws.core.controller.impl.AxisInvocationController.doInvoke(AxisInvocationController.java:130) at org.apache.axis2.jaxws.core.controller.impl.InvocationControllerImpl.invoke(InvocationControllerImpl.java:93) at org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.invokeSEIMethod(JAXWSProxyHandler.java:364) at org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.invoke(JAXWSProxyHandler.java:185) at $Proxy41.deleteAccount(Unknown Source) at com.myCompany.myPackage.MyWebServiceClient.callSomeWebService(MyWebServiceClient.java:100) (other classes specific to my application and framework) ... Caused by: javax.xml.bind.JAXBException: class com.myCompany.generatedCode.WebServiceOperationName nor any of its super class is known to this context. at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getBeanInfo(JAXBContextImpl.java:556) at com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsRoot(XMLSerializer.java:452) at com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:314) at com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.marshal(MarshallerImpl.java:243) at javax.xml.bind.helpers.AbstractMarshallerImpl.marshal(AbstractMarshallerImpl.java:75) at com.ibm.xml.xlxp2.jaxb.marshal.MarshallerProxy.marshal(MarshallerProxy.java:100) at org.apache.axis2.datasource.jaxb.JAXBDSContext$1.run(JAXBDSContext.java:470) at org.apache.axis2.java.security.AccessController.doPrivileged(AccessController.java:76) at org.apache.axis2.datasource.jaxb.JAXBDSContext.marshalByElement(JAXBDSContext.java:455) at org.apache.axis2.datasource.jaxb.JAXBDSContext.marshal(JAXBDSContext.java:414) at org.apache.axis2.jaxws.message.databinding.impl.JAXBBlockImpl._outputFromBO(JAXBBlockImpl.java:189) at org.apache.axis2.jaxws.message.impl.BlockImpl.outputTo(BlockImpl.java:372) at org.apache.axis2.jaxws.message.impl.BlockImpl.serialize(BlockImpl.java:296) at org.apache.axiom.om.impl.llom.OMSourcedElementImpl.internalSerializeAndConsume(OMSourcedElementImpl.java:808) at org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl.java:975) at org.apache.axiom.om.impl.llom.OMElementImpl.internalSerializeAndConsume(OMElementImpl.java:1016) at org.apache.axiom.soap.impl.llom.SOAPEnvelopeImpl.serializeInternally(SOAPEnvelopeImpl.java:271) at org.apache.axiom.soap.impl.llom.SOAPEnvelopeImpl.internalSerialize(SOAPEnvelopeImpl.java:233) at org.apache.axiom.om.impl.llom.OMElementImpl.internalSerializeAndConsume(OMElementImpl.java:1016) at org.apache.axiom.om.impl.llom.OMNodeImpl.serializeAndConsume(OMNodeImpl.java:488) at org.apache.axis2.transport.http.SOAPMessageFormatter.writeTo(SOAPMessageFormatter.java:88) at com.ibm.ws.websvcs.transport.http.SOAPOverHTTPSender.writeMessage(SOAPOverHTTPSender.java:3271) at com.ibm.ws.websvcs.transport.http.SOAPOverHTTPSender.sendChunkedRequest(SOAPOverHTTPSender.java:888) at com.ibm.ws.websvcs.transport.http.SOAPOverHTTPSender.sendSOAPRequest(SOAPOverHTTPSender.java:807) at com.ibm.ws.websvcs.transport.http.SOAPOverHTTPSender.send(SOAPOverHTTPSender.java:611) at com.ibm.ws.websvcs.transport.http.HTTPTransportSender.invoke(HTTPTransportSender.java:364) at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:531) at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:401) at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:228) at org.apache.axis2.client.OperationClient.execute(OperationClient.java:163) at org.apache.axis2.jaxws.core.controller.impl.AxisInvocationController.execute(AxisInvocationController.java:581) ... 52 more
触发此操作的是尝试调用名为WebServiceOperationName
的Web服务操作。我已经看到了处理此错误的其他提示,通常涉及添加@XmlSeeAlso
注释或调整编组和解组的方式。
在这种情况下,我正在调用一个Web服务,其代码由Maven基于WSDL(和支持模式)生成。我没有直接控制Maven生成的代码,而且我无法控制marshall / unmarshall调用。应用程序中的其他Web服务调用似乎没有任何问题。
更奇怪的是,我无法在我的本地服务器上重现这一点,尽管它发生在开发服务器上。生成的Web服务JAR与应用程序代码的其余部分相同。
这个例外本周突然出现(并且一直如此),我怀疑环境有所改变,但我不确定是什么。有什么想法吗?
一个新观察:
我第一次尝试在服务器启动/重新启动后运行此代码时,它需要一段时间(大约一分钟)才能失败并抛出异常。每次之后,异常几乎是瞬间......
更多信息:
WebSphere 7.0.0.23(在服务器上)存在此问题,但在WebSphere 7.0.0.7中(在工作站上)不存在。
答案 0 :(得分:2)
问题已经解决。我正在检查包含WAS正在抱怨的类的jar,并注意到某些类在不同级别的包层次结构中重复。值得指出的是,原始错误中报告的类实际上并不是这些重复类中的一个。此外,应用程序没有引用同一类的不同变体 - 引用的类在预期的包中。一个级别的额外重复项没有在任何地方引用(据我所知)。
看起来就像一个糟糕的Maven配置,但是当我检查xjb绑定文件时,我无法弄清楚该架构命名空间中的类型如何绑定到两个不同的包。无论哪种方式,我清理了Maven使用的一些绑定文件,将重构的公共绑定放到一个文件中,让Maven重建jar,然后测试,突然问题就消失了!
显然WAS 7.0.0.23中存在问题,因为原始jar在WAS 7.0.0.7上运行良好。 可能是由Maven绑定问题引起的,导致看起来很奇怪但技术上有效的jar。
同样有趣的是:我们的一位开发人员将WAS升级到7.0.0.25并使用了原来的“坏”jar并且出现了“没有这样的操作”错误,而不是JAXBException。
答案 1 :(得分:1)
我在Guidewire ClaimCenter中遇到了同样的问题,这是一个可以配置的保险应用程序,但核心根本无法修改,它是基于Java的,它包含了像axis2这样的组件,但我创建了一个单独的java项目,它包装在webservice调用中,我使用wsimport创建了所有存根代码。它在我的开发环境中运行良好,这是windows和jetty因为是Guidewire平台来配置它(没有其他选择)。我们使用WAS 7作为生产服务器。
Caused by: javax.xml.ws.WebServiceException: javax.xml.bind.JAXBException: au.com.mycompany.policyinquiry.retrieveinsurancepolicydetails.v1.RetrieveInsurancePolicyDetailsResp is not known to this context at org.apache.axis2.jaxws.ExceptionFactory.createWebServiceException(ExceptionFactory.java:175) at org.apache.axis2.jaxws.ExceptionFactory.makeWebServiceException(ExceptionFactory.java:70) at org.apache.axis2.jaxws.ExceptionFactory.makeWebServiceException(ExceptionFactory.java:128) at org.apache.axis2.jaxws.marshaller.impl.alt.DocLitBareMinimalMethodMarshaller.demarshalResponse(DocLitBareMinimalMethodMarshaller.java:158) at org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.createResponse(JAXWSProxyHandler.java:499) at org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.invokeSEIMethod(JAXWSProxyHandler.java:377) at org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.invoke(JAXWSProxyHandler.java:185) at $Proxy80.retrieveInsurancePolicyDetails(Unknown Source)
我试图在服务器端生成和编译客户端,以防万一它与不同的JDK平台有关,但这并没有解决问题。 我找到了下一篇文章was 6! 但对于WAS 6,我没有尝试过。
When the JAX-WS web service engine receives a message, it uses the JAXB engine to convert the message into java beans. The message indicates a failure occurred while converting xml into an object of type com.somecom.lib.business.xml.ComIdentifierXml. The failure indicates that the JAXB engine was not initialized with information about this user class. . In this use case, the class com.somecom.lib.business.xml.ComIdentifierXml is packaged in a JAR at the EAR level. The exception does not happen if the class is packaged in a JAR located in the WAR module's WEB-INF/lib directory.
SOLUTION:
目标环境: IBM服务器 IBM JDK 1.6 IBM Webpshere 7.0.0.25
调用webservice的客户端使用的是纯JAVA,不依赖于外部库JAX-WS RI 2.1.6
在webspehre 1-为应用程序设置最后加载到父级的类 2-使用以下命令关闭webservice注释:将com.ibm.websphere.webservices.DisableIBMJAXWSEngine属性设置为true。这将禁用基于修改后的Axis2的Websphere自己的实现 3-使用第三方JAX-WS运行时部署应用程序 在我的情况下,我使用了Glassfish Metro 1.5,其中包括JAX-WS RI 2.1.7,与JDK 1.6.0_37的本地环境相同
就是这样
干杯 亚历克斯:)