Я использую jaxb2-marshaller для создания классов для связи с веб-сервисом. Java-классы генерируются с использованием некоторых файлов wsdl.

Сейчас все в порядке, но когда я пытаюсь использовать некоторые из сгенерированных классов, я получал эту ошибку немаршаллинга, хотя я использую сгенерированные классы ObjectFactory.

Некоторые из стека:

org.springframework.ws.soap.client.SoapFaultClientException: Unmarshalling Error: unexpected element (uri:"http://xxxxxxxxx", local:"customer"). Expected elements are <{}customer> 
    at org.springframework.ws.soap.client.core.SoapFaultMessageResolver.resolveFault(SoapFaultMessageResolver.java:38)
    at org.springframework.ws.client.core.WebServiceTemplate.handleFault(WebServiceTemplate.java:826)
    at org.springframework.ws.client.core.WebServiceTemplate.doSendAndReceive(WebServiceTemplate.java:621)
    at org.springframework.ws.client.core.WebServiceTemplate.sendAndReceive(WebServiceTemplate.java:555)
    at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:390)
    at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:383)
    at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:373)
    at einvoice.service.CustomerService.createCustomer(CustomerService.java:40)
    at einvoice.controller.facturatie.FacturatieOverzichtController.handleRenderRequest(FacturatieOverzichtController.java:36)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

И мой класс:

@Service
public class CustomerService {

    @Autowired
    private WebServiceTemplate customerDaoTemplate;

    private ObjectFactory customerObjectFactory;

    public CustomerService() {
        customerObjectFactory = new ObjectFactory();    
    }

    public boolean createCustomer(Customer c)
    {
        System.out.println("CREATING CUSTOMER");
        einvoice.proxy.customerdaoservice.Customer customer = customerObjectFactory.createCustomer();
        customer.setConnectionURL("test");
        customer.setUid("testuid");
        customer.setName("KorneelTest");

        Create create = customerObjectFactory.createCreate();
        create.setCustomer(customer);

        try
        {
            customerDaoTemplate.marshalSendAndReceive(customerObjectFactory.createCreate(create));
            return true;
        }
        catch(Exception ex)
        {
            ex.printStackTrace();
            return false;
        }
    }

Эту ошибку показывает метод createCustomer ().

The generated ObjectFactory class:

//
// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.7 
// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
// Any modifications to this file will be lost upon recompilation of the source schema. 
// Generated on: 2014.09.12 at 12:04:04 PM CEST 
//


package einvoice.proxy.customerdaoservice;

import javax.xml.bind.JAXBElement;
import javax.xml.bind.annotation.XmlElementDecl;
import javax.xml.bind.annotation.XmlRegistry;
import javax.xml.namespace.QName;


/**
 * This object contains factory methods for each 
 * Java content interface and Java element interface 
 * generated in the be.icredit.einvoice.proxy.customerdaoservice package. 
 * <p>An ObjectFactory allows you to programatically 
 * construct new instances of the Java representation 
 * for XML content. The Java representation of XML 
 * content can consist of schema derived interfaces 
 * and classes representing the binding of schema 
 * type definitions, element declarations and model 
 * groups.  Factory methods for each of these are 
 * provided in this class.
 * 
 */
@XmlRegistry
public class ObjectFactory {

    private final static QName _AbstractFilter_QNAME = new QName("http://xxxxxxx/", "abstractFilter");
    private final static QName _Customer_QNAME = new QName("http://xxxxxxx/", "customer");
    private final static QName _FindSingleResponse_QNAME = new QName("http://xxxxxxx/", "findSingleResponse");
    private final static QName _Create_QNAME = new QName("http://xxxxxxx/", "create");
    private final static QName _Find_QNAME = new QName("http://xxxxxxx/", "find");
    private final static QName _CreateResponse_QNAME = new QName("xxxxxxx/", "createResponse");
    private final static QName _FindResponse_QNAME = new QName("http://xxxxxxx/", "findResponse");
    private final static QName _UpdateResponse_QNAME = new QName("http://xxxxxxx/", "updateResponse");
    private final static QName _FindSingle_QNAME = new QName("http://xxxxxxx/", "findSingle");
    private final static QName _CustomerFilter_QNAME = new QName("http://xxxxxxx/", "customerFilter");
    private final static QName _Update_QNAME = new QName("http://xxxxxxx/", "update");
    private final static QName _AbstractEntity_QNAME = new QName("http://xxxxxxx/", "abstractEntity");

    /**
     * Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: be.icredit.einvoice.proxy.customerdaoservice
     * 
     */
    public ObjectFactory() {
    }

    /**
     * Create an instance of {@link Update }
     * 
     */
    public Update createUpdate() {
        return new Update();
    }

    /**
     * Create an instance of {@link CustomerFilter }
     * 
     */
    public CustomerFilter createCustomerFilter() {
        return new CustomerFilter();
    }

    /**
     * Create an instance of {@link UpdateResponse }
     * 
     */
    public UpdateResponse createUpdateResponse() {
        return new UpdateResponse();
    }

    /**
     * Create an instance of {@link FindSingle }
     * 
     */
    public FindSingle createFindSingle() {
        return new FindSingle();
    }

    /**
     * Create an instance of {@link FindResponse }
     * 
     */
    public FindResponse createFindResponse() {
        return new FindResponse();
    }

    /**
     * Create an instance of {@link CreateResponse }
     * 
     */
    public CreateResponse createCreateResponse() {
        return new CreateResponse();
    }

    /**
     * Create an instance of {@link FindSingleResponse }
     * 
     */
    public FindSingleResponse createFindSingleResponse() {
        return new FindSingleResponse();
    }

    /**
     * Create an instance of {@link Customer }
     * 
     */
    public Customer createCustomer() {
        return new Customer();
    }

    /**
     * Create an instance of {@link Create }
     * 
     */
    public Create createCreate() {
        return new Create();
    }

    /**
     * Create an instance of {@link Find }
     * 
     */
    public Find createFind() {
        return new Find();
    }

    /**
     * Create an instance of {@link Pager }
     * 
     */
    public Pager createPager() {
        return new Pager();
    }

    /**
     * Create an instance of {@link JAXBElement }{@code <}{@link AbstractFilter }{@code >}}
     * 
     */
    @XmlElementDecl(namespace = "http://xxxxxxx/", name = "abstractFilter")
    public JAXBElement<AbstractFilter> createAbstractFilter(AbstractFilter value) {
        return new JAXBElement<AbstractFilter>(_AbstractFilter_QNAME, AbstractFilter.class, null, value);
    }

    /**
     * Create an instance of {@link JAXBElement }{@code <}{@link Customer }{@code >}}
     * 
     */
    @XmlElementDecl(namespace = "http://xxxxxxx/", name = "customer")
    public JAXBElement<Customer> createCustomer(Customer value) {
        return new JAXBElement<Customer>(_Customer_QNAME, Customer.class, null, value);
    }

    /**
     * Create an instance of {@link JAXBElement }{@code <}{@link FindSingleResponse }{@code >}}
     * 
     */
    @XmlElementDecl(namespace = "http://xxxxxxx/", name = "findSingleResponse")
    public JAXBElement<FindSingleResponse> createFindSingleResponse(FindSingleResponse value) {
        return new JAXBElement<FindSingleResponse>(_FindSingleResponse_QNAME, FindSingleResponse.class, null, value);
    }

    /**
     * Create an instance of {@link JAXBElement }{@code <}{@link Create }{@code >}}
     * 
     */
    @XmlElementDecl(namespace = "http://xxxxxxx/", name = "create")
    public JAXBElement<Create> createCreate(Create value) {
        return new JAXBElement<Create>(_Create_QNAME, Create.class, null, value);
    }

    /**
     * Create an instance of {@link JAXBElement }{@code <}{@link Find }{@code >}}
     * 
     */
    @XmlElementDecl(namespace = "http://xxxxxxx/", name = "find")
    public JAXBElement<Find> createFind(Find value) {
        return new JAXBElement<Find>(_Find_QNAME, Find.class, null, value);
    }

    /**
     * Create an instance of {@link JAXBElement }{@code <}{@link CreateResponse }{@code >}}
     * 
     */
    @XmlElementDecl(namespace = "http://xxxxxxx/", name = "createResponse")
    public JAXBElement<CreateResponse> createCreateResponse(CreateResponse value) {
        return new JAXBElement<CreateResponse>(_CreateResponse_QNAME, CreateResponse.class, null, value);
    }

    /**
     * Create an instance of {@link JAXBElement }{@code <}{@link FindResponse }{@code >}}
     * 
     */
    @XmlElementDecl(namespace = "http://xxxxxxx/", name = "findResponse")
    public JAXBElement<FindResponse> createFindResponse(FindResponse value) {
        return new JAXBElement<FindResponse>(_FindResponse_QNAME, FindResponse.class, null, value);
    }

    /**
     * Create an instance of {@link JAXBElement }{@code <}{@link UpdateResponse }{@code >}}
     * 
     */
    @XmlElementDecl(namespace = "http://xxxxxxx/", name = "updateResponse")
    public JAXBElement<UpdateResponse> createUpdateResponse(UpdateResponse value) {
        return new JAXBElement<UpdateResponse>(_UpdateResponse_QNAME, UpdateResponse.class, null, value);
    }

    /**
     * Create an instance of {@link JAXBElement }{@code <}{@link FindSingle }{@code >}}
     * 
     */
    @XmlElementDecl(namespace = "http://xxxxxxx/", name = "findSingle")
    public JAXBElement<FindSingle> createFindSingle(FindSingle value) {
        return new JAXBElement<FindSingle>(_FindSingle_QNAME, FindSingle.class, null, value);
    }

    /**
     * Create an instance of {@link JAXBElement }{@code <}{@link CustomerFilter }{@code >}}
     * 
     */
    @XmlElementDecl(namespace = "http://xxxxxxx/", name = "customerFilter")
    public JAXBElement<CustomerFilter> createCustomerFilter(CustomerFilter value) {
        return new JAXBElement<CustomerFilter>(_CustomerFilter_QNAME, CustomerFilter.class, null, value);
    }

    /**
     * Create an instance of {@link JAXBElement }{@code <}{@link Update }{@code >}}
     * 
     */
    @XmlElementDecl(namespace = "http://xxxxxxx/", name = "update")
    public JAXBElement<Update> createUpdate(Update value) {
        return new JAXBElement<Update>(_Update_QNAME, Update.class, null, value);
    }

    /**
     * Create an instance of {@link JAXBElement }{@code <}{@link AbstractEntity }{@code >}}
     * 
     */
    @XmlElementDecl(namespace = "http://xxxxxxx/", name = "abstractEntity")
    public JAXBElement<AbstractEntity> createAbstractEntity(AbstractEntity value) {
        return new JAXBElement<AbstractEntity>(_AbstractEntity_QNAME, AbstractEntity.class, null, value);
    }

}

Класс package-info.java:

//
// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.7 
// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
// Any modifications to this file will be lost upon recompilation of the source schema. 
// Generated on: 2014.09.12 at 03:44:51 PM CEST 
//

@javax.xml.bind.annotation.XmlSchema(namespace = "http://xxxxxxx/")
package einvoice.proxy.customerdaoservice;
10
Kornelito Benito 12 Сен 2014 в 13:35
Можете ли вы добавить конфигурацию Spring, классы Customer и Create? ... кроме того, почему в методе marshalSendAndReceive вы не помещаете непосредственно объект create?
 – 
Xstian
12 Сен 2014 в 13:52
MarshalSendAndReceive преобразует мой «запрос» в понятный формат (XML) для веб-службы, с которой вы связались. метод create используется для создания объекта в веб-сервисе. Добавлена ​​дополнительная документация, больше нет места для класса create.
 – 
Kornelito Benito
12 Сен 2014 в 14:20
Никто? : /. Я действительно застрял на этом ..: s
 – 
Kornelito Benito
12 Сен 2014 в 18:07

6 ответов

Лучший ответ
  • Либо исходная схема не имеет правильного целевого пространства имен.
  • Или вам почему-то не хватает package-info.java

Разместите свои ObjectFactory и package-info.java (должны быть созданы рядом с ObjectFactory).

На самом деле вам не нужно создавать свои экземпляры с помощью ObjectFactory, обычные конструкции new работают нормально. :) ObjectFactory не творит волшебства. Он в основном используется JAXB во время демаршаллинга.

Пс. Пометьте вопросы, связанные с maven-jaxb2-plugin, тегом maven-jaxb2-plugin - это поможет мне быстрее привлечь мое внимание.

9
lexicore 13 Сен 2014 в 01:43
WSDL, которые у меня есть, поставляет другая компания. Я отредактирую свой вопрос и предоставлю сгенерированную ObjectFactory и информацию о пакете. Большое спасибо за удар
 – 
Kornelito Benito
15 Сен 2014 в 11:51
Это странно. У моего wsdl есть правильные целевые пространства имен, и у меня есть класс package-info.java в моем проекте ..
 – 
Kornelito Benito
15 Сен 2014 в 12:15
Хм, на первый взгляд все в порядке. Пожалуйста, попробуйте создать изолированный тестовый пример, посмотрите, выполняется ли маршаллинг в модульном тесте.
 – 
lexicore
15 Сен 2014 в 12:16
Честно говоря, у меня нет опыта создания тестовых примеров JUnit, и уж тем более в среде Spring. Я действительно застрял. Я попытался сделать «тестовый» пример, просто используя этот метод при запуске.
 – 
Kornelito Benito
15 Сен 2014 в 12:44
Забудьте о среде, тестируйте без какой-либо среды. И познакомьтесь с тестами. Они помогают очень выяснить, где находится ошибка. Если вы обрабатываете свой код как монолит, вам потребуется гораздо больше времени. Разделите его на единицы и проверьте, что они работают изолированно. Вот пример немаршаллинга: github.com/highsource/ogc-schemas/blob/master/kml/2.2.0/src/… Проверяет, что следующий файл демаршалируется: github. com / highsource / ogc-schemas / tree / master / kml / 2.2.0 / src /…
 – 
lexicore
15 Сен 2014 в 15:21

Используйте следующую аннотацию

@XmlRootElement(name="Customer")

В корне класса, как показано ниже. Поскольку JAXb не создает аннотацию @XmlRootElement автоматически, вам необходимо вручную поместить эту аннотацию в начало класса.

 The generated ObjectFactory class:
This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.7 
// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
// Any modifications to this file will be lost upon recompilation of the source schema. 
// Generated on: 2014.09.12 at 12:04:04 PM CEST 
//


package einvoice.proxy.customerdaoservice;

import javax.xml.bind.JAXBElement;
import javax.xml.bind.annotation.XmlElementDecl;
import javax.xml.bind.annotation.XmlRegistry;
import javax.xml.namespace.QName;


/**
 * This object contains factory methods for each 
 * Java content interface and Java element interface 
 * generated in the be.icredit.einvoice.proxy.customerdaoservice package. 
 * <p>An ObjectFactory allows you to programatically 
 * construct new instances of the Java representation 
 * for XML content. The Java representation of XML 
 * content can consist of schema derived interfaces 
 * and classes representing the binding of schema 
 * type definitions, element declarations and model 
 * groups.  Factory methods for each of these are 
 * provided in this class.
 * 
 */
@XmlRootElement(name="Customer")
@XmlRegistry
public class ObjectFactory {

    private final static QName _AbstractFilter_QNAME = new QName("http://xxxxxxx/", "abstractFilter");
    private final static QName _Customer_QNAME = new QName("http://xxxxxxx/", "customer");
    private final static QName _FindSingleResponse_QNAME = new QName("http://xxxxxxx/", "findSingleResponse");
    private final static QName _Create_QNAME = new QName("http://xxxxxxx/", "create");
    private final static QName _Find_QNAME = new QName("http://xxxxxxx/", "find");
    private final static QName _CreateResponse_QNAME = new QName("xxxxxxx/", "createResponse");
    private final static QName _FindResponse_QNAME = new QName("http://xxxxxxx/", "findResponse");
    private final static QName _UpdateResponse_QNAME = new QName("http://xxxxxxx/", "updateResponse");
    private final static QName _FindSingle_QNAME = new QName("http://xxxxxxx/", "findSingle");
    private final static QName _CustomerFilter_QNAME = new QName("http://xxxxxxx/", "customerFilter");
    private final static QName _Update_QNAME = new QName("http://xxxxxxx/", "update");
    private final static QName _AbstractEntity_QNAME = new QName("http://xxxxxxx/", "abstractEntity");

/**
 * Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: be.icredit.einvoice.proxy.customerdaoservice
 * 
 */
public ObjectFactory() {
}

/**
 * Create an instance of {@link Update }
 * 
 */
public Update createUpdate() {
    return new Update();
}

/**
 * Create an instance of {@link CustomerFilter }
 * 
 */
public CustomerFilter createCustomerFilter() {
    return new CustomerFilter();
}

/**
 * Create an instance of {@link UpdateResponse }
 * 
 */
public UpdateResponse createUpdateResponse() {
    return new UpdateResponse();
}

/**
 * Create an instance of {@link FindSingle }
 * 
 */
public FindSingle createFindSingle() {
    return new FindSingle();
}

/**
 * Create an instance of {@link FindResponse }
 * 
 */
public FindResponse createFindResponse() {
    return new FindResponse();
}

/**
 * Create an instance of {@link CreateResponse }
 * 
 */
public CreateResponse createCreateResponse() {
    return new CreateResponse();
}

/**
 * Create an instance of {@link FindSingleResponse }
 * 
 */
public FindSingleResponse createFindSingleResponse() {
    return new FindSingleResponse();
}

/**
 * Create an instance of {@link Customer }
 * 
 */
public Customer createCustomer() {
    return new Customer();
}

/**
 * Create an instance of {@link Create }
 * 
 */
public Create createCreate() {
    return new Create();
}

/**
 * Create an instance of {@link Find }
 * 
 */
public Find createFind() {
    return new Find();
}

/**
 * Create an instance of {@link Pager }
 * 
 */
public Pager createPager() {
    return new Pager();
}

/**
 * Create an instance of {@link JAXBElement }{@code <}{@link AbstractFilter }{@code >}}
 * 
 */
@XmlElementDecl(namespace = "http://xxxxxxx/", name = "abstractFilter")
public JAXBElement<AbstractFilter> createAbstractFilter(AbstractFilter value) {
    return new JAXBElement<AbstractFilter>(_AbstractFilter_QNAME, AbstractFilter.class, null, value);
}

/**
 * Create an instance of {@link JAXBElement }{@code <}{@link Customer }{@code >}}
 * 
 */
@XmlElementDecl(namespace = "http://xxxxxxx/", name = "customer")
public JAXBElement<Customer> createCustomer(Customer value) {
    return new JAXBElement<Customer>(_Customer_QNAME, Customer.class, null, value);
}

/**
 * Create an instance of {@link JAXBElement }{@code <}{@link FindSingleResponse }{@code >}}
 * 
 */
@XmlElementDecl(namespace = "http://xxxxxxx/", name = "findSingleResponse")
public JAXBElement<FindSingleResponse> createFindSingleResponse(FindSingleResponse value) {
    return new JAXBElement<FindSingleResponse>(_FindSingleResponse_QNAME, FindSingleResponse.class, null, value);
}

/**
 * Create an instance of {@link JAXBElement }{@code <}{@link Create }{@code >}}
 * 
 */
@XmlElementDecl(namespace = "http://xxxxxxx/", name = "create")
public JAXBElement<Create> createCreate(Create value) {
    return new JAXBElement<Create>(_Create_QNAME, Create.class, null, value);
}

/**
 * Create an instance of {@link JAXBElement }{@code <}{@link Find }{@code >}}
 * 
 */
@XmlElementDecl(namespace = "http://xxxxxxx/", name = "find")
public JAXBElement<Find> createFind(Find value) {
    return new JAXBElement<Find>(_Find_QNAME, Find.class, null, value);
}

/**
 * Create an instance of {@link JAXBElement }{@code <}{@link CreateResponse }{@code >}}
 * 
 */
@XmlElementDecl(namespace = "http://xxxxxxx/", name = "createResponse")
public JAXBElement<CreateResponse> createCreateResponse(CreateResponse value) {
    return new JAXBElement<CreateResponse>(_CreateResponse_QNAME, CreateResponse.class, null, value);
}

/**
 * Create an instance of {@link JAXBElement }{@code <}{@link FindResponse }{@code >}}
 * 
 */
@XmlElementDecl(namespace = "http://xxxxxxx/", name = "findResponse")
public JAXBElement<FindResponse> createFindResponse(FindResponse value) {
    return new JAXBElement<FindResponse>(_FindResponse_QNAME, FindResponse.class, null, value);
}

/**
 * Create an instance of {@link JAXBElement }{@code <}{@link UpdateResponse }{@code >}}
 * 
 */
@XmlElementDecl(namespace = "http://xxxxxxx/", name = "updateResponse")
public JAXBElement<UpdateResponse> createUpdateResponse(UpdateResponse value) {
    return new JAXBElement<UpdateResponse>(_UpdateResponse_QNAME, UpdateResponse.class, null, value);
}

/**
 * Create an instance of {@link JAXBElement }{@code <}{@link FindSingle }{@code >}}
 * 
 */
@XmlElementDecl(namespace = "http://xxxxxxx/", name = "findSingle")
public JAXBElement<FindSingle> createFindSingle(FindSingle value) {
    return new JAXBElement<FindSingle>(_FindSingle_QNAME, FindSingle.class, null, value);
}

/**
 * Create an instance of {@link JAXBElement }{@code <}{@link CustomerFilter }{@code >}}
 * 
 */
@XmlElementDecl(namespace = "http://xxxxxxx/", name = "customerFilter")
public JAXBElement<CustomerFilter> createCustomerFilter(CustomerFilter value) {
    return new JAXBElement<CustomerFilter>(_CustomerFilter_QNAME, CustomerFilter.class, null, value);
}

/**
 * Create an instance of {@link JAXBElement }{@code <}{@link Update }{@code >}}
 * 
 */
@XmlElementDecl(namespace = "http://xxxxxxx/", name = "update")
public JAXBElement<Update> createUpdate(Update value) {
    return new JAXBElement<Update>(_Update_QNAME, Update.class, null, value);
}

/**
 * Create an instance of {@link JAXBElement }{@code <}{@link AbstractEntity }{@code >}}
 * 
 */
@XmlElementDecl(namespace = "http://xxxxxxx/", name = "abstractEntity")
public JAXBElement<AbstractEntity> createAbstractEntity(AbstractEntity value) {
    return new JAXBElement<AbstractEntity>(_AbstractEntity_QNAME, AbstractEntity.class, null, value);
}

}

1
Jithin Kunjachan 1 Фев 2016 в 07:54

Если в вашем проекте более 1 модуля, проверьте наличие повторяющихся имен классов или имен каталогов.

Я получал ту же ошибку, и мне удалось ее решить, изменив имена пакетов в моем проекте.

В моем проекте было два модуля с идентичной структурой каталогов module/src/main/java/com/example/directory/path

У нас было две разные конечные точки и два разных WSDL, но оба были от одного и того же клиента. Когда мы автоматически сгенерировали классы POJO из WSDL, он создал для нас файловую структуру. Я заметил, что пространство имен, сгенерированное в XML, использовало одно и то же пространство имен для XML, сгенерированного в обоих модулях, когда они должны были быть разными (отсюда трассировка стека).

Все, что я сделал для решения проблемы, это изменил имена каталогов, чтобы они были более конкретными для каждого модуля.

1
jrmullen 16 Янв 2018 в 21:43

Я думаю, что нашел проблему.

Я использовал версию 0.9.0 maven-jaxb2-plugin. Эта версия дала мне то странное исключение! Я вернулся к версии maven-jaxbe2-plugin 0.8.3, эта версия выдает ошибку 404:

08:56:45,212 ERROR [DispatcherPortlet:572] Could not complete request
org.springframework.ws.client.WebServiceTransportException: Not Found [404]
    at org.springframework.ws.client.core.WebServiceTemplate.handleError(WebServiceTemplate.java:695)
    at org.springframework.ws.client.core.WebServiceTemplate.doSendAndReceive(WebServiceTemplate.java:606)
    at org.springframework.ws.client.core.WebServiceTemplate.sendAndReceive(WebServiceTemplate.java:555)
    at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:390)
    at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:383)
    at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:373)
    at be.icredit.einvoice.service.CustomerService.createCustomer(CustomerService.java:43)
    at be.icredit.einvoice.controller.facturatie.FacturatieOverzichtController.handleRenderRequest(FacturatieOverzichtController.java:36)
0
Kornelito Benito 15 Сен 2014 в 13:20

Эта трассировка создается из-за того, что имена de request и response message не совпадают в WSDL и de java классах:

Ответное сообщение:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "acceptMessageResponse", propOrder = {
    "acceptMessageReturn"
})
public class AcceptMessageResponse {

    @XmlElement(required = true)
    protected String acceptMessageReturn;

    public String getAcceptMessageReturn() {
        return acceptMessageReturn;
    }
    public void setAcceptMessageReturn(String value) {
        this.acceptMessageReturn = value;
    }
}

Принять сообщение:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "acceptMessage", propOrder = {
    "in0"
})
public class AcceptMessage {

    @XmlElement(required = true)
    protected String in0;

    public String getIn0() {
        return in0;
    }
    public void setIn0(String value) {
        this.in0 = value;
    }
}

В этом примере WSDL должен определять: 1.

<?xml version='1.0' encoding='UTF-8'?>
<wsdl:definitions name="PORX_IN02016001SACYL"
    targetNamespace="http://components.mule.server.mirth.webreach.com"
    xmlns:ns1="http://cxf.apache.org/bindings/xformat" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
    xmlns:tns="http://components.mule.server.mirth.webreach.com"
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <wsdl:types>
        <xs:schema elementFormDefault="qualified"
            targetNamespace="http://components.mule.server.mirth.webreach.com"
            version="1.0" xmlns:tns="http://components.mule.server.mirth.webreach.com"
            xmlns:xs="http://www.w3.org/2001/XMLSchema">
            <xs:element name="acceptMessage">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element form="unqualified" name="in0" type="xs:string" />
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="acceptMessageResponse" nillable="true"
                type="xs:anyType" />
            <xs:complexType name="acceptMessageResponse">
                <xs:sequence />
            </xs:complexType>
        </xs:schema>
    </wsdl:types>
    <wsdl:message name="acceptMessage">
        <wsdl:part element="tns:acceptMessage" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="acceptMessageResponse">
        <wsdl:part element="tns:acceptMessageResponse" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:portType name="PORX_IN02016001SACYL">
        <wsdl:operation name="acceptMessage">
            <wsdl:input message="tns:acceptMessage" name="acceptMessage">
            </wsdl:input>
            <wsdl:output message="tns:acceptMessageResponse" name="acceptMessageResponse">
            </wsdl:output>
        </wsdl:operation>
    </wsdl:portType>
    <wsdl:binding name="PORX_IN02016001SACYLSoapBinding" type="tns:PORX_IN02016001SACYL">
        <soap:binding style="document"
            transport="http://schemas.xmlsoap.org/soap/http" />
        <wsdl:operation name="acceptMessage">
            <soap:operation soapAction="" style="document" />
            <wsdl:input name="acceptMessage">
                <soap:body use="literal" />
            </wsdl:input>
            <wsdl:output name="acceptMessageResponse">
                <soap:body use="literal" />
            </wsdl:output>
        </wsdl:operation>
    </wsdl:binding>
    <wsdl:service name="PORX_IN02016001SACYL">
        <wsdl:port binding="tns:PORX_IN02016001SACYLSoapBinding"
            name="PORX_IN02016001SACYL">
            <soap:address
                location="http://localhost:8080/vere/services/PORX_IN02016001SACYL" />
        </wsdl:port>
    </wsdl:service>
</wsdl:definitions>
0
juldeh 10 Янв 2017 в 11:31

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

SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setNamespaceAware(true);
0
Nikhil Agrawal 20 Июн 2022 в 20:18