我使用Apache CXF 2.2.7和Spring 3开发了一个简单的Web服务应用程序,作为WAR文件部署到Tomcat上,但是我收到以下错误消息:
2010年4月12日15:56:12 org.apache.cxf.phase.PhaseInterceptorChain doDefaultLogging警告:拦截器{ http://services.aristabi.com/ } ReportingServiceImplService#{ http://services.aristabi.com/ } getNewBusinessVolumeByCreateDate_v2抛出异常,现在展开org.apache.cxf.interceptor.Fault:Unmarshalling Error:意外元素(uri:" http://services.aristabi.com/ ",local:"searchCriteria").org.apache中org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:623)的org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:764)中的预期元素是<{} searchCriteria> .gxf.jaxb.io.DataReaderImpl.read(DataReaderImpl.java:128)org.apache.cxf.interceptor.DocLiteralInInterceptor.handleMessage(DocLiteralInInterceptor.java:106)org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain) .java:243)org.apache中的org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:109)org.apache.cxf.transport.servlet.ServletDestination.invoke(ServletDestination.java:98).位于org.apache.cxf.transport.servlet.AbstractCXFServlet的org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:178)中的cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:406).在org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequ调用(AbstractCXFServlet.java:142)est(AbstractHTTPServlet.java:179)位于org.apache的javax.servlet.http.HttpServlet.service(HttpServlet.java:637)的org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:103) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)中的.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:159)org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain) .java:206)org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)位于org.apache.catalina的org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191). core.tandardHostValve.invoke(StandardHostValve.java:128)org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)在org.apache.coyote的org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293).位于org.apache.coyote.http11.Http11Protocol $ Http11ConnectionHandler.process(Http11Protocol.java:583)的or11.apache.tomcat.util.net.JIoEndpoint $ Worker.run中的http11.Http11Processor.process(Http11Processor.java:849) JIoEndpoint.java:454)at java.lang.Thread.run(Thread.java:619)引起:javax.xml.bind.UnmarshalException - 带链接异常:[javax.xml.bind.UnmarshalException:unexpected element(uri: " http://services.aristabi.com/",local:"searchCriteria ").com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl上的com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.handleStreamException(UnmarshallerImpl.java:425)中的预期元素是<{} searchCriteria>] .unmarshal0(UnmarshallerImpl.java:362)位于org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java)的com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:339) :749)... 25更多引起:javax.xml.bind.UnmarshalException:意外元素(uri:" http://services.aristabi.com/ ",local:"searchCriteria").在com.sun.xml.bind.v2.runtime.unmarshaller.Loader的com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(UnmarshallingContext.java:642)中,预期元素为<{} searchCriteria>.报告错误(Loader.java:254)位于com.sun.xml.bind.vind.vind.v2.runtime.unmarshaller.Loader的com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:249). reportUnexpectedChildElement(Loader.java:116)at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.childElement(Loader.java:101)at com.sun.xml.bind.v2.runtime.unmarshaller.StructureLoader. childElement(StructureLoader.java:245)位于com.sun.xml.bind.vind.vind.v2.runtime.unmarshaller.UnmarshallingContext的com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext._startElement(UnmarshallingContext.java:478). startElement(UnmarshallingContext.java:459)位于com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.handleStartElement(StAXStreamConnector.java:242)的com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.桥(StAXStreamC onnector.java:176)at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:360)... 27更多引起:javax.xml.bind.UnmarshalException:意外元素( uri:" http://services.aristabi.com/ ",local:"searchCriteria").预期的元素是<{} searchCriteria> ... 38以上
这可能是一个简单的问题,但我似乎无法解决它.谁能指出我正确的方向来解决这个问题?
谢谢,Zahanghir
顺便说一下,这就是我的wsdl的样子
<?xml version='1.0' encoding='UTF-8'?><wsdl:definitions name="ReportingServiceImplService" targetNamespace="http://services.aristabi.com/" xmlns:ns1="http://cxf.apache.org/bindings/xformat" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://services.aristabi.com/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<wsdl:types>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="unqualified" targetNamespace="http://services.aristabi.com/" xmlns:tns="http://services.aristabi.com/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="getNewBusinessVolumeByCreateDate" type="tns:getNewBusinessVolumeByCreateDate" />
<xs:element name="getNewBusinessVolumeByCreateDateResponse" type="tns:getNewBusinessVolumeByCreateDateResponse" />
<xs:element name="getNewBusinessVolumeByCreateDate_v2" type="tns:getNewBusinessVolumeByCreateDate_v2" />
<xs:element name="getNewBusinessVolumeByCreateDate_v2Response" type="tns:getNewBusinessVolumeByCreateDate_v2Response" />
<xs:element name="newBusinessLead" type="tns:newBusinessLead" />
<xs:element name="quotes" type="tns:quotes" />
<xs:element name="searchCriteria" type="tns:searchCriteria" />
<xs:complexType name="getNewBusinessVolumeByCreateDate">
<xs:sequence>
<xs:element minOccurs="0" name="agent" type="xs:string" />
<xs:element minOccurs="0" name="broker" type="xs:string" />
<xs:element minOccurs="0" name="businessUnit" type="xs:string" />
<xs:element minOccurs="0" name="fromMonth" type="xs:string" />
<xs:element minOccurs="0" name="fromYear" type="xs:string" />
<xs:element minOccurs="0" name="region" type="xs:string" />
<xs:element minOccurs="0" name="toMonth" type="xs:string" />
<xs:element minOccurs="0" name="toYear" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="getNewBusinessVolumeByCreateDateResponse">
<xs:sequence>
<xs:element minOccurs="0" name="return" type="tns:newBusinessLead" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="newBusinessLead">
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="convertedQuotes" nillable="true" type="tns:quotes" />
<xs:element maxOccurs="unbounded" minOccurs="0" name="declinedQuotes" nillable="true" type="tns:quotes" />
<xs:element maxOccurs="unbounded" minOccurs="0" name="ntuQuotes" nillable="true" type="tns:quotes" />
<xs:element maxOccurs="unbounded" minOccurs="0" name="pendingQuotes" nillable="true" type="tns:quotes" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="quotes">
<xs:sequence>
<xs:element minOccurs="0" name="month" type="xs:string" />
<xs:element name="premium" type="xs:int" />
<xs:element minOccurs="0" name="quoteStatus" type="xs:string" />
<xs:element name="volume" type="xs:int" />
<xs:element minOccurs="0" name="year" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="arrayList">
<xs:complexContent>
<xs:extension base="tns:abstractList">
<xs:sequence />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType abstract="true" name="abstractList">
<xs:complexContent>
<xs:extension base="tns:abstractCollection">
<xs:sequence />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType abstract="true" name="abstractCollection">
<xs:sequence />
</xs:complexType>
<xs:complexType name="getNewBusinessVolumeByCreateDate_v2">
<xs:sequence>
<xs:element minOccurs="0" name="searchCriteria" type="tns:searchCriteria" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="searchCriteria">
<xs:sequence>
<xs:element minOccurs="0" name="agent" type="xs:string" />
<xs:element minOccurs="0" name="broker" type="xs:string" />
<xs:element minOccurs="0" name="businessUnit" type="xs:string" />
<xs:element minOccurs="0" name="fromMonth" type="xs:string" />
<xs:element minOccurs="0" name="fromYear" type="xs:string" />
<xs:element minOccurs="0" name="region" type="xs:string" />
<xs:element minOccurs="0" name="toMonth" type="xs:string" />
<xs:element minOccurs="0" name="toYear" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="getNewBusinessVolumeByCreateDate_v2Response">
<xs:sequence>
<xs:element minOccurs="0" name="return" type="tns:newBusinessLead" />
</xs:sequence>
</xs:complexType>
<xs:element name="InvalidUserCredentialsException" type="tns:InvalidUserCredentialsException" />
<xs:complexType name="InvalidUserCredentialsException">
<xs:sequence />
</xs:complexType>
<xs:element name="tokenString" nillable="true" type="xs:string" />
</xs:schema>
</wsdl:types>
<wsdl:message name="InvalidUserCredentialsException">
<wsdl:part element="tns:InvalidUserCredentialsException" name="InvalidUserCredentialsException">
</wsdl:part>
</wsdl:message>
<wsdl:message name="getNewBusinessVolumeByCreateDateResponse">
<wsdl:part element="tns:getNewBusinessVolumeByCreateDateResponse" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="getNewBusinessVolumeByCreateDate">
<wsdl:part element="tns:getNewBusinessVolumeByCreateDate" name="parameters">
</wsdl:part>
<wsdl:part element="tns:tokenString" name="tokenString">
</wsdl:part>
</wsdl:message>
<wsdl:message name="getNewBusinessVolumeByCreateDate_v2Response">
<wsdl:part element="tns:getNewBusinessVolumeByCreateDate_v2Response" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="getNewBusinessVolumeByCreateDate_v2">
<wsdl:part element="tns:getNewBusinessVolumeByCreateDate_v2" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:portType name="IReportingService">
<wsdl:operation name="getNewBusinessVolumeByCreateDate">
<wsdl:input message="tns:getNewBusinessVolumeByCreateDate" name="getNewBusinessVolumeByCreateDate">
</wsdl:input>
<wsdl:output message="tns:getNewBusinessVolumeByCreateDateResponse" name="getNewBusinessVolumeByCreateDateResponse">
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="getNewBusinessVolumeByCreateDate_v2">
<wsdl:input message="tns:getNewBusinessVolumeByCreateDate_v2" name="getNewBusinessVolumeByCreateDate_v2">
</wsdl:input>
<wsdl:output message="tns:getNewBusinessVolumeByCreateDate_v2Response" name="getNewBusinessVolumeByCreateDate_v2Response">
</wsdl:output>
<wsdl:fault message="tns:InvalidUserCredentialsException" name="InvalidUserCredentialsException">
</wsdl:fault>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="ReportingServiceImplServiceSoapBinding" type="tns:IReportingService">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="getNewBusinessVolumeByCreateDate">
<soap:operation soapAction="" style="document" />
<wsdl:input name="getNewBusinessVolumeByCreateDate">
<soap:header message="tns:getNewBusinessVolumeByCreateDate" part="tokenString" use="literal">
</soap:header>
<soap:body parts="parameters" use="literal" />
</wsdl:input>
<wsdl:output name="getNewBusinessVolumeByCreateDateResponse">
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="getNewBusinessVolumeByCreateDate_v2">
<soap:operation soapAction="" style="document" />
<wsdl:input name="getNewBusinessVolumeByCreateDate_v2">
<soap:body use="literal" />
</wsdl:input>
<wsdl:output name="getNewBusinessVolumeByCreateDate_v2Response">
<soap:body use="literal" />
</wsdl:output>
<wsdl:fault name="InvalidUserCredentialsException">
<soap:fault name="InvalidUserCredentialsException" use="literal" />
</wsdl:fault>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="ReportingServiceImplService">
<wsdl:port binding="tns:ReportingServiceImplServiceSoapBinding" name="ReportingServiceImplPort">
<soap:address location="http://localhost:8889/AristaInsuranceServices/reportingService" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
Run Code Online (Sandbox Code Playgroud)
我没有XSD.你能指出WSDL有什么问题吗?
小智 9
我知道这个问题是一年前没有接受的答案,但今天我的错误完全相同.
像原始问题海报一样,我有一个带有返回对象的方法的Java-First服务.对我来说问题是我在服务方法返回的bean中添加了一个额外的属性.
一旦我重新发布/重新部署了服务,客户端jaxb为返回对象生成的类不再与服务器端WSDL复杂类型相同(即客户端类缺少新属性),因此我有了"意外元素" "缺少财产名称的例外情况.
一旦我使用WsdlToJava重新生成所有jaxb对象,客户端代码就像正常一样工作.
我还遇到了针对这种情况的建议解决方法,您可能不希望每次在服务器端更改属性时都重新生成客户端代码.解决方案基本上是忽略客户端上的意外元素异常,因为它适用于现有代码不使用的新元素.链接到此解决方案:http:
//whileonefork.blogspot.com/2010/11/cxf-backwards-compatibility-adding.html
传入的消息无效。基本上,它与架构不匹配。(或者至少是 JAXB 所期望的)基本上,在消息中的某个地方,您有一个元素,例如:
<ns1:searchCriteria> ..... </ns1:searchCriteria>
Run Code Online (Sandbox Code Playgroud)
或者可能没有命名空间前缀,但在某处设置了默认命名空间。但是,JAXB 期望该元素不合格。就像是:
<searchCriteria> ..... </searchCriteria>
Run Code Online (Sandbox Code Playgroud)
一定要检查发送方以查看他们发送的内容,并检查模式以查看模式说明它应该是什么样子。(elementFormDefault=unqualified 如果未指定则为默认值)
| 归档时间: |
|
| 查看次数: |
36891 次 |
| 最近记录: |