Я сгенерировал JAXB-совместимый код клиента для веб-службы SOAP. Список документации о том, что вызов метода будет:
CalculateOrderReply CalculateOrder(CalculateOrderRequest request)
Связанные Java сгенерированные классы:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"request"
})
@XmlRootElement(name = "CalculateOrder")
public class CalculateOrder {
@XmlElementRef(name = "request", namespace = "http://www.brinksoftware.com/webservices/ordering/20140219", type = JAXBElement.class, required = false)
protected JAXBElement<CalculateOrderRequestComplexType> request;
/**
* Gets the value of the request property.
*
* @return
* possible object is
* {@link JAXBElement }{@code <}{@link CalculateOrderRequestComplexType }{@code >}
*
*/
public JAXBElement<CalculateOrderRequestComplexType> getRequest() {
return request;
}
/**
* Sets the value of the request property.
*
* @param value
* allowed object is
* {@link JAXBElement }{@code <}{@link CalculateOrderRequestComplexType }{@code >}
*
*/
public void setRequest(JAXBElement<CalculateOrderRequestComplexType> value) {
this.request = value;
}
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "CalculateOrderReply", propOrder = {
"order"
})
public class CalculateOrderReply
extends OrderingWebServiceReply
{
@XmlElementRef(name = "Order", namespace = "http://www.brinksoftware.com/webservices/ordering/20140219", type = JAXBElement.class, required = false)
protected JAXBElement<Order> order;
/**
* Gets the value of the order property.
*
* @return
* possible object is
* {@link JAXBElement }{@code <}{@link Order }{@code >}
*
*/
public JAXBElement<Order> getOrder() {
return order;
}
/**
* Sets the value of the order property.
*
* @param value
* allowed object is
* {@link JAXBElement }{@code <}{@link Order }{@code >}
*
*/
public void setOrder(JAXBElement<Order> value) {
this.order = value;
}
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "CalculateOrderRequest", propOrder = {
"options",
"order"
})
public class CalculateOrderRequestComplexType {
@XmlElementRef(name = "Options", namespace = "http://www.brinksoftware.com/webservices/ordering/20140219", type = JAXBElement.class, required = false)
protected JAXBElement<OrderingOptions> options;
@XmlElementRef(name = "Order", namespace = "http://www.brinksoftware.com/webservices/ordering/20140219", type = JAXBElement.class, required = false)
protected JAXBElement<NewOrder> order;
/**
* Gets the value of the options property.
*
* @return
* possible object is
* {@link JAXBElement }{@code <}{@link OrderingOptions }{@code >}
*
*/
public JAXBElement<OrderingOptions> getOptions() {
return options;
}
/**
* Sets the value of the options property.
*
* @param value
* allowed object is
* {@link JAXBElement }{@code <}{@link OrderingOptions }{@code >}
*
*/
public void setOptions(JAXBElement<OrderingOptions> value) {
this.options = value;
}
/**
* Gets the value of the order property.
*
* @return
* possible object is
* {@link JAXBElement }{@code <}{@link NewOrder }{@code >}
*
*/
public JAXBElement<NewOrder> getOrder() {
return order;
}
/**
* Sets the value of the order property.
*
* @param value
* allowed object is
* {@link JAXBElement }{@code <}{@link NewOrder }{@code >}
*
*/
public void setOrder(JAXBElement<NewOrder> value) {
this.order = value;
}
}
public class CalculateOrderRequestElement
extends JAXBElement<CalculateOrderRequestComplexType>
{
protected final static QName NAME = new QName("http://www.brinksoftware.com/webservices/ordering/20140219", "CalculateOrderRequest");
public CalculateOrderRequestElement(CalculateOrderRequestComplexType value) {
super(NAME, ((Class) CalculateOrderRequestComplexType.class), null, value);
}
public CalculateOrderRequestElement() {
super(NAME, ((Class) CalculateOrderRequestComplexType.class), null, null);
}
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"calculateOrderResult"
})
@XmlRootElement(name = "CalculateOrderResponse")
public class CalculateOrderResponse {
@XmlElementRef(name = "CalculateOrderResult", namespace = "http://www.brinksoftware.com/webservices/ordering/20140219", type = JAXBElement.class, required = false)
protected JAXBElement<CalculateOrderReply> calculateOrderResult;
/**
* Gets the value of the calculateOrderResult property.
*
* @return
* possible object is
* {@link JAXBElement }{@code <}{@link CalculateOrderReply }{@code >}
*
*/
public JAXBElement<CalculateOrderReply> getCalculateOrderResult() {
return calculateOrderResult;
}
/**
* Sets the value of the calculateOrderResult property.
*
* @param value
* allowed object is
* {@link JAXBElement }{@code <}{@link CalculateOrderReply }{@code >}
*
*/
public void setCalculateOrderResult(JAXBElement<CalculateOrderReply> value) {
this.calculateOrderResult = value;
}
}
public class ObjectFactory {
}
Предоставлен мой универсальный c код запроса:
protected Object sendRequest(WebServiceTemplate webServiceTemplate, Object request, Class<?> expectedResponseType) {
Object response = webServiceTemplate.marshalSendAndReceive(request);
if (response != null && response.getClass() == expectedResponseType) {
return response;
}
throw new BrinkIntegrationException("Something");
}
Я пишу приведенный ниже запрос вызова, который не работает.
public String getCalculateOrderReply() throws BrinkIntegrationException{
CalculateOrder calculateOrder = factory.createCalculateOrder();
CalculateOrderReply reply = (CalculateOrderReply)sendRequest(webServiceTemplate, calculateOrder, CalculateOrder.class);
String name = reply.getOrder().getName().getPrefix();
return name;
}
Как правильно написать запрос вызова, чтобы он работал?