Javax.xml.ws.soap.SOAPFaultException: ошибка демаршаллинга

У меня проблема с вызовом служб из веб-службы. Я не могу понять приведенную ниже ошибку демаршаллинга, которую я получаю. Пожалуйста помоги. Я просмотрел принятые сообщения и не знаю, что происходит, потому что описание ошибки очень общее.

Чтобы сгенерировать клиентский код Java из WSDL, я использую: wsimport -b binding.xml service.wsdl

где binding.xml:

<bindings xmlns:wsdl = "http://schemas.xmlsoap.org/wsdl/" wsdlLocation = "http://localhost:8080/services/service?wsdl"
xmlns = "http://java.sun.com/xml/ns/jaxws">
    <!-- Disable default wrapper style -->
    <enableWrapperStyle>false</enableWrapperStyle>
</bindings>

(К сожалению, я не смог прикрепить свой WSDL из-за ограничения размера тела сообщения)

Итак, после того, как я сгенерировал своего клиента и реализовал вызов службы, я получил это сообщение об ошибке: javax.xml.ws.soap.SOAPFaultException: Unmarshalling Error: at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:156) at com.sun.proxy.$Proxy151.protocolInsert(Unknown Source) ...

Вот фрагмент кода:

import javax.xml.ws.BindingProvider;
//other import
public class ProtocolHandler{
....
    private ProtocolloServicePortType initServiceProtocol() throws                                       Exception
    {
        // Init client WS
        ProtocolloService invoiceProcolWs = new ProtocolloService();
        ProtocolloServicePortType port = invoiceProcolWs.getProtocollo();
        BindingProvider bp = (BindingProvider) port;

        // Setting endopoint
        bp.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, getUrl());

        return port;
    }

    private void createProtocol(){
        try{
           //Initialize service
           ProtocolloServicePortType protocolService = initServiceProtocol();
           //Create a request
           ProtocolInsertRequest request = prepareRequest();
           //Call the method service protocolInsert
           ProtocolResponse response = protocolService.protocolInsert(request);
        }catch(Exception e){
             //manage Exception
        }

    }
}

Я использую JDK 1.7.0_25, Eclipse Jee Neon.

В моем проекте используется несколько библиотек: может быть, эта ошибка связана с проблемой несовместимости?

Существуют jaxbw-plugin-1.0.jar, jaxb-xjc-2.0.jar, jaxb-impl-2.0.jar, jaxb-api-2.0.jar, javaee-api-6.0.jar.

ОБНОВЛЕНИЕ 18/10/2018

Я обнаружил проблему. С помощью SOAPHandler я заметил, что в моем запросе отсутствует значение даты, когда я их оценил (при отладке я вижу, что в моем запросе была оценена каждая дата).

<ns5:protocolInsert xmlns = "http://insielmercato.it/protocollo-ws/data/common" xmlns:ns2 = "http://insielmercato.it/protocollo-ws/data/anagrafic" xmlns:ns3 = "http://insielmercato.it/protocollo-ws/data/filing" xmlns:ns4 = "http://insielmercato.it/protocollo-ws/data/protocol" xmlns:ns5 = "http://insielmercato.it/protocollo-ws/services/protocolloService">
<ns4:user>
    <code>USER</code>
    <password>PSWD</password>
</ns4:user>
<ns4:operatingOfficeCode>OFFICE</ns4:operatingOfficeCode>
<ns4:officeCode>GEN</ns4:officeCode>
<ns4:registerCode>GEN</ns4:registerCode>
<ns4:direction>A</ns4:direction>
<ns4:sequenceCode>SEQUENCE</ns4:sequenceCode>
<ns4:subjectDocument>Test protocollazione notifica fattura passiva</ns4:subjectDocument>
<ns4:subjectProtocol>PROTOCOLLAZIONE DOC. PROVA000002</ns4:subjectProtocol>
<ns4:receptionSendingDate/>
<ns4:documentDetails>
    <number>PROVA000002</number>
    <date/>
    <year>2018</year>
    <documentTypeCode>FAT</documentTypeCode>
</ns4:documentDetails>
<ns4:senderList>
    <ns4:sender>
        <code>SENDER</code>
    </ns4:sender>
</ns4:senderList>

Как вы можете видеть, теги <ns4:receptionSendingDate/> и <date/> (внутри <ns4:documentDetails>) равны нулю, но я оценил их в своих методах. Удаление этих тегов из моего запроса вызовет правильную работу службы без ошибки Unmarshalling.

Как такое возможно?

Всем спасибо за внимание.

Если какая-то информация отсутствует, скажите, что добавить, чтобы улучшить вопрос.

Chiuccolo 16.10.2018 13:53
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
1
3 095
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я выяснил источник проблемы.

Снова отладка Я заметил, что в моем XMLGregorianCalendar час, минута, секунда и часовой пояс были установлены на -2147483648, потому что библиотека Utils, содержащаяся в моем проекте, устанавливала XMLGregorianCalendar следующим образом:

GregorianCalendar cal = new GregorianCalendar();
    cal.setTime(date);

    XMLGregorianCalendar xmlDate = DatatypeFactory.newInstance().newXMLGregorianCalendarDate(
            cal.get(Calendar.YEAR),
            cal.get(Calendar.MONTH)+1,
            cal.get(Calendar.DAY_OF_MONTH),
            DatatypeConstants.FIELD_UNDEFINED);

Итак, сначала я изменил этот метод в

XMLGregorianCalendar xmlDate = DatatypeFactory.newInstance().newXMLGregorianCalendar(cal);

а во-вторых я "поругал" кто сделал этот XD.

И моя проблема была решена

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