JAX- RPC: получение ошибки "org.xml.sax.SAXException: WSWS3047E: Ошибка: невозможно десериализовать элемент"

При попытке изменить существующий 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

Пожалуйста, дайте мне знать, если требуется какая-либо другая информация.

1 ответ

Решение

@BK Элизабет - спасибо за ваш ответ. Согласно текущей реализации, именно wsdl используется для генерации Java-бинов с использованием подхода сверху вниз вместо подхода снизу вверх, на который вы ссылались в своем комментарии (без сомнения, это лучший подход).

Настоящая проблема заключалась в том, что сгенерированные bean-компоненты добавляются на уровне контейнера как разделяемая библиотека, поскольку объекты bean-объектов передаются между несколькими модулями. Так что, хотя я обновлял bean-компоненты на уровне модулей, на самом деле была загружена предыдущая версия служебных bean-компонентов. При обновлении разделяемой библиотеки мои изменения начали отражаться, и ошибка "WSWS3047E: Ошибка: не удалось десериализовать элемент" была решена ".


Для "WSWS3047E: Ошибка: Невозможно десериализовать элемент" можно ссылаться на приведенную ниже ссылку, хотя моя проблема была немного другой.

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

Другие вопросы по тегам