Я использую веб-сервис SOAP в стиле документа. Он работает с интерфейсом SOAP, но я получаю сообщение об ошибке, пытаясь вызвать его программно.
Вот ошибка, которую я получаю с сервера:
<SubmitRequestDocResponse xmlns="http://tripauthority.com/hotel">
<SubmitRequestDocResult>
<ArnResponse xmlns:ns2="http://tripauthority.com/hotel" xmlns="">
<Error>
<Message>
Request is not valid. Details: The
'http://tripauthority.com/hotel:ArnRequest'
element is not declared.
</Message>
</Error>
</ArnResponse>
</SubmitRequestDocResult>
</SubmitRequestDocResponse>
Код, вызывающий его, выглядит так:
ARequestDoc requestDoc = objectFactory.createSubmitRequestDocARequestDoc();
ArnRequest request = requestFactory.createArnRequest();
requestDoc.getContent().add(request);
SubmitRequestDocResult response =
soap.submitRequestDoc("id", "username", "password", requestDoc);
И используемые классы организованы и аннотированы:
пакет com.company.server.ws:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"siteID",
"aUserName",
"aPassword",
"aRequestDoc"
})
@XmlRootElement(name = "SubmitRequestDoc")
@XmlSeeAlso(ArnRequest.class)
public class SubmitRequestDoc { // Stuff... }
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"content"
})
public static class ARequestDoc { // Stuff ... }
пакет com.company.server.ws.request:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"availability",
"rateDetails",
"reservation",
"cancellation"
})
@XmlRootElement(name = "ArnRequest")
public class ArnRequest { // Stuff ... }
Кроме того, com.company.server.ws имеет следующее package-info.java
:
@javax.xml.bind.annotation.XmlSchema(
namespace = "http://tripauthority.com/hotel",
elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package com.company.server.ws;
Кроме того, за все это стоит WSDL и XSD для запроса
Кто-нибудь знает, что я могу сделать, чтобы правильно отправить это сообщение? Я могу отправить жестко закодированный запрос строки, используя SOAP UI, и он работает просто отлично.
Спасибо
Редактировать
Что бы это ни стоило, до сих пор я догадывался, что это могло бы пройти, если бы я мог каким-то образом отправить часть ArnRequest
без объявленного пространства имен, если есть какой-то способ сделать это, но это всего лишь предположение, и любая оценка приветствуется ,