我正在向网络服务发送请求,但该请求似乎无效。我正在使用 SoapUI 发送类似的请求,并且 Web 服务接受它。我需要将我的请求更改为 SoapUI 发送的内容。如何将命名空间添加到我的请求中? WSDL 是 here .
代码
搜索航类
@XmlRootElement(name = "SearchFlights")
@XmlAccessorType(XmlAccessType.FIELD)
public class SearchFlights {
@XmlElement(name = "SoapMessage")
private SoapMessage soapMessage;
getter and setter
肥皂消息
@XmlRootElement(name = "SoapMessage")
@XmlAccessorType(XmlAccessType.FIELD)
public class WegoloSoapMessage {
@XmlElement(name = "Username")
private String username;
@XmlElement(name = "Password")
private String password;
@XmlElement(name = "LanguageCode")
private String languageCode;
@XmlElement(name = "Request")
private Request request;
getters and setters
请求
@XmlRootElement(name = "Request")
@XmlAccessorType(XmlAccessType.FIELD)
public class Request {
@XmlElement(name = "Departure")
private String departure;
@XmlElement(name = "Destination")
private String destination;
@XmlElement(name = "DepartureDate")
private String departureDate;
@XmlElement(name = "ReturnDate")
private String returnDate;
@XmlElement(name = "NumADT")
private int numADT;
@XmlElement(name = "NumINF")
private int numInf;
@XmlElement(name = "NumCHD")
private int numCHD;
@XmlElement(name = "CurrencyCode")
private String currencyCode;
@XmlElement(name = "WaitForResult")
private boolean waitForResult;
@XmlElement(name = "NearByDepartures")
private boolean nearByDepartures;
@XmlElement(name = "NearByDestinations")
private boolean nearByDestinations;
@XmlElement(name = "RROnly")
private boolean rronly;
@XmlElement(name = "MetaSearch")
private boolean metaSearch;
getters and setters
jaxb.index
SearchFlights
Flight
Flights
Leg
Legs
Outbound
Request
Response
WegoloSoapMessage
发送请求的代码
try {
SaajSoapMessageFactory soapMsgFac = new SaajSoapMessageFactory(
MessageFactory.newInstance());
soapMsgFac.afterPropertiesSet();
WebServiceTemplate webServiceTemplate = new WebServiceTemplate(
soapMsgFac);
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
marshaller.setContextPath("com.myprojet.flights.wegolo");
marshaller.afterPropertiesSet();
webServiceTemplate.setMarshaller(marshaller);
webServiceTemplate.setUnmarshaller(marshaller);
webServiceTemplate.afterPropertiesSet();
Response response = (Response) webServiceTemplate
.marshalSendAndReceive(
"http://www5v80.elsyarres.net/service.asmx",
searchFlights,
new WebServiceMessageCallback() {
public void doWithMessage(WebServiceMessage message)
{
((SoapMessage)message).setSoapAction("ElsyArres.API/SearchFlights");
}
}
);
Response msg = (Response) response;
System.err.println("Wegolo >>>"
+ msg.getFlights().getFlight().size());
} catch (Exception s) {
s.printStackTrace();
}
}
我的请求
SoapUI 请求
最佳答案
在您的请求中,元素之前没有命名空间,就像来自 SoapUI 的请求一样。
例如您的元素:
<SearchFlights>
SoupUI 元素:
<els:SearchFlights>
您应该使用代码形式 here 在所有元素之前添加命名空间 xmlns:els="ElsyArres.API"
和前缀或here或here .
关于java - 需要将我的 SOAP 请求与 SoapUI 发送的内容相匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34786724/