【问题标题】:JAX- RPC : Getting error "org.xml.sax.SAXException: WSWS3047E: Error: Cannot deserialize element"JAX- RPC:出现错误“org.xml.sax.SAXException:WSWS3047E:错误:无法反序列化元素”
【发布时间】:2014-11-28 08:32:27
【问题描述】:

在尝试修改现有 wsdl 并更改操作的请求类型和响应类型时,我得到以下信息。

我遵循的过程是: 1.修改xsd 2. 生成Java Bean Skeleton(多处引用,不能改)

已尝试修复: 1.参考多篇文章,已将WSDL改为elementFormDefault="unqualified"并重新生成支持文件。 2. 我尝试设置 xmlns="" 来禁用该字段的命名空间。

WSDL(仅粘贴修改后的操作,原来的 wswdl 大约有 52 个操作)

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions name="ABCDEF" targetNamespace="http://managemyxyz.services.abc.def/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://managemyabc.services.abc.def/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsd1="http://cat.abc.def/ABC/schema/">

    <wsdl:types>
    <xsd:schema targetNamespace="http://manageabc.services.abc.def/">
      <xsd:complexType name="NewType"/>
    </xsd:schema>
        <xsd:schema>
            <xsd:import namespace="http://cat.abc.def/ABC/schema/" schemaLocation="xsd/ABC.xsd">
            </xsd:import>
    </xsd:schema>

  <wsdl:message name="insertABCRequest">
    <wsdl:part name="insertABCRequest" type="xsd1:InsertABCItemRequestType"/>
  </wsdl:message>
  <wsdl:message name="insertABCItemResponse">
    <wsdl:part name="insertABCItemResponse" type="xsd1:InsertABCItemResponseType"/>
  </wsdl:message>
  <wsdl:portType name="ABCDEF">
    <wsdl:operation name="insertABC">
        <wsdl:input message="tns:insertABCItemRequest1"/>
        <wsdl:output message="tns:insertABCItemResponse1"/>
    </wsdl:operation>
  </wsdl:portType>
<wsdl:binding name="ABCSOAP" type="tns:ABC">
        <wsdl:operation name="insertABC">

    <soap:operation soapAction="http://manageabc.services.abc.def/insertABC"/>
    <wsdl:input>

        <soap:body use="literal"/>
    </wsdl:input>
    <wsdl:output>

        <soap:body use="literal"/>
    </wsdl:output>
</wsdl:operation>
</wsdl:binding>
 <wsdl:service name="ABC">
<wsdl:port binding="tns:ABCSOAP" name="ABCSOAP">
  <soap:address location="http://localhost:10039/.modulename.war/services/ABCSOAP"/>
</wsdl:port>

ABC.xsd

<element name="InsertABCRequest" type="Q1:InsertABCItemRequestType">
</element>

<complexType name="InsertABCItemRequestType">
    <sequence>
        <element name="abcdId" type="int"/>
        <element name="abcdCode" type="string"/>
        <element name="abcNumber" type="string"/>
    </sequence>
</complexType>
<element name="InsertABCItemResponse" type="Q1:InsertABCItemResponseType">
</element>

<complexType name="insertABCItemResponse">
    <sequence>
        <element name="responseHeader" type="Q1:ResponseCodeType"/>
    </sequence>
</complexType>

例外:

[11/28/14 13:21:20:240 IST] 000000af WebServicesSe E com.ibm.ws.webservices.engine.transport.http.WebServicesServlet doPost WSWS3227E:  Error: Exception:
                         WebServicesFault



faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.generalException
 faultString: org.xml.sax.SAXException: WSWS3047E: Error: Cannot deserialize element fieldName of bean com.abc.xyz.abc.InsertABCRequestType. 
Child element fieldName does not belong in namespace . 
Most likely, a third party web services platform has sent an incorrect SOAP message. Message being parsed: 
 faultActor: null
 faultDetail: 

org.xml.sax.SAXException: WSWS3047E: Error: Cannot deserialize element fieldName of bean com.abc.xyz.abc.InsertABCRequestType.
Child element InsertABCRequestType does not belong in namespace . 
Most likely, a third party web services platform has sent an incorrect SOAP message. Message being parsed: 
    at com.ibm.ws.webservices.engine.WebServicesFault.makeFault(WebServicesFault.java:300)
    at com.ibm.ws.webservices.engine.SOAPPart._getSOAPEnvelope(SOAPPart.java:1090)
    at com.ibm.ws.webservices.engine.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:628)
    at com.ibm.ws.webservices.engine.SOAPPart.getEnvelope(SOAPPart.java:656)
    at com.ibm.ws.webservices.engine.handlers.jaxrpc.JAXRPCHandlerChain.handleRequest(JAXRPCHandlerChain.java:301)
    at com.ibm.ws.webservices.engine.handlers.jaxrpc.JAXRPCHandler.invokeServerRequestHandler(JAXRPCHandler.java:516)
    at com.ibm.ws.webservices.engine.handlers.jaxrpc.JAXRPCHandler$1.invoke(JAXRPCHandler.java:381)
    at com.ibm.ws.webservices.engine.PivotHandlerWrapper.invoke(PivotHandlerWrapper.java:225)
    at com.ibm.ws.webservices.engine.WebServicesEngine.invoke(WebServicesEngine.java:336)
    at com.ibm.ws.webservices.engine.transport.http.WebServicesServlet.doPost(WebServicesServlet.java:1246)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:738)
    at com.ibm.ws.webservices.engine.transport.http.WebServicesServletBase.service(WebServicesServletBase.java:344)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:831)

环境细节:

服务器:IBM WAS 7.0.0.31 IDE:IBM RAD 8.5

如果需要任何其他信息,请告诉我。

【问题讨论】:

  • 既然您使用的是 RAD,您能否澄清一下您是否有任何用作服务类的 java 类?您可以在类本身中更改方法的请求类型、响应类型,然后从类中生成 wsdl。

标签: web-services xsd wsdl websphere-7 jax-rpc


【解决方案1】:

@BK Elizabeth - 感谢您的回复。根据当前的实现,使用自上而下的方法而不是您在评论中提到的自下而上的方法来生成 java bean 的是 wsdl(毫无疑问,这是一种更好的方法)。

真正的问题是生成的 bean 在容器级别作为共享库添加,因为 bean 的对象在多个模块之间传递。因此,即使我在模块级别更新 bean,但实际上已加载了服务 bean 的先前版本。在更新共享库时,我的更改开始反映并且错误“WSWS3047E:错误:无法反序列化元素”得到解决”。


对于“WSWS3047E:错误:无法反序列化元素”错误,可以参考下面提到的链接,尽管我的问题有点不同。

http://www-01.ibm.com/support/docview.wss?uid=swg21220377

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-11
    • 1970-01-01
    • 2013-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-06
    相关资源
    最近更新 更多