我使用下面的代码来解析soap响应,但是我正在接收UnmarshallingFailureException,我将@XmlSeeAlso更改为@XMLRootElement,但问题仍然存在。WSDL是这里。
Caused by: javax.xml.bind.UnmarshalException: unexpected element
(uri:"ElsyArres.API", local:"SearchFlightsResponse"). Expected elements are
<{ElsyArres.API}Inbound>,<{ElsyArres.API}Leg>,<{ElsyArres.API}Legs>,
<{ElsyArres.API}Outbound>,<{ElsyArres.API}Request>,<{ElsyArres.API}Response>,
<{ElsyArres.API}SearchFlights>,<{ElsyArres.API}SoapMessage>码
@XmlRootElement(name = "SoapMessage")
@XmlAccessorType(XmlAccessType.FIELD)
public class WegoloSoapMessageResponse {
@XmlElement(name = "Username")
private String username;
@XmlElement(name = "Password")
private String password;
@XmlElement(name = "LanguageCode")
private String languageCode;
@XmlElement(name = "ErrorMessage")
private String errorMessage;
@XmlElement(name = "ErrorCode")
private int errorCode;
@XmlElement(name = "AppVersion")
private String appVersion;
@XmlElement(name = "Request")
private Request request;
@XmlElement(name = "Response")
private Response response;
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
@XmlRootElement(name="Response")
@XmlAccessorType(XmlAccessType.FIELD)
public class Response {
@XmlElement(name="SearchFlightId")
private String searchFlightId;
@XmlElement(name="Roundtrip")
private boolean roundTrip;
@XmlElement(name="CurrencyCode")
private String currencyCode;
@XmlElement(name="Flights")
private Flights flights;
getters and setters
@XmlSeeAlso(Flight.class)
@XmlAccessorType(XmlAccessType.FIELD)
public class Flights {
@XmlElement(name="Flight")
private List<Flight> flight;
getter and setter
@XmlSeeAlso(Outbound.class)
@XmlAccessorType(XmlAccessType.FIELD)
public class Flight {
@XmlElement(name = "Outbound")
private Outbound outbound;
@XmlElement(name="Inbound")
private Inbound inbound;
@XmlElement(name = "BagFee")
private int bagFee;
@XmlElement(name = "CcFee")
private int ccFee;
@XmlElement(name = "HandlingFee")
private int handlingFee;
@XmlElement(name = "TotalFare")
private int totalFare;
@XmlElement(name = "FlightId")
private String flightId;
@XmlElement(name = "Link2Book")
private String link2Book;
@XmlElement(name = "Provider")
private String provider;
getters and setters
@XmlRootElement(name = "Outbound")
@XmlAccessorType(XmlAccessType.FIELD)
public class Outbound {
@XmlElement(name="CarName")
private String carName;
@XmlElement(name="CarCode")
private String carCode;
@XmlElement(name="DepName")
private String depName;
@XmlElement(name="DepCode")
private String depCode;
@XmlElement(name="DestName")
private String destName;
@XmlElement(name="DestCode")
private String destCode;
@XmlElement(name="Duration")
private String duration;
@XmlElement(name="FlightNo")
private String flightNo;
@XmlElement(name="DepDateTime")
private Date dapDateTime;
@XmlElement(name="ArrDateTime")
private Date arrDateTime;
@XmlElement(name="Legs")
private Legs legs;
@XmlElement(name="Taxes")
private int taxes;
@XmlElement(name="FareADT")
private int fareADT;
@XmlElement(name="FareCHD")
private int fareCHD;
@XmlElement(name="FareINF")
private int fareInf;
@XmlElement(name="MiscFees")
private int miscFees;
@XmlElement(name="Idx")
private int idx;
@XmlElement(name="FareClass")
private String fareClass;
@XmlElement(name="FareType")
private String fareType;
@XmlElement(name="FareId")
private String fareId;
getters and setters
@XmlRootElement(name="Legs")
@XmlAccessorType(XmlAccessType.FIELD)
public class Legs {
@XmlElement(name="Leg")
private Leg leg;
getter and setter
@XmlRootElement(name="Leg")
@XmlAccessorType(XmlAccessType.FIELD)
public class Leg {
@XmlElement(name="Sequence")
private int sequence;
@XmlElement(name="FlightNo")
private String flightNo;
@XmlElement(name="DepCode")
private String depCode;
@XmlElement(name="DepName")
private String depName;
@XmlElement(name="DestCode")
private String destCode;
@XmlElement(name="DestName")
private String destName;
@XmlElement(name="DepTime")
private String depTime;
@XmlElement(name="ArrTime")
private String arrTime;
@XmlElement(name="CarCode")
private String carCode;
@XmlElement(name="CarName")
private String carName;
@XmlElement(name="FareClass")
private String fareClass;
@XmlElement(name="ArrDateTime")
private Date arrDateTime;
@XmlElement(name="DepDateTime")
private Date depDateTime;
getters and setters
@XmlRootElement(name = "Inbound")
@XmlAccessorType(XmlAccessType.FIELD)
public class Inbound {
@XmlElement(name="CarName")
private String carName;
@XmlElement(name="CarCode")
private String carCode;
@XmlElement(name="DepName")
private String depName;
@XmlElement(name="DepCode")
private String depCode;
@XmlElement(name="DestName")
private String destName;
@XmlElement(name="DestCode")
private String destCode;
@XmlElement(name="Duration")
private String duration;
@XmlElement(name="FlightNo")
private String flightNo;
@XmlElement(name="DepDateTime")
private Date dapDateTime;
@XmlElement(name="ArrDateTime")
private Date arrDateTime;
@XmlElement(name="Legs")
private Legs legs;
@XmlElement(name="Taxes")
private int taxes;
@XmlElement(name="FareADT")
private int fareADT;
@XmlElement(name="FareCHD")
private int fareCHD;
@XmlElement(name="FareINF")
private int fareInf;
@XmlElement(name="MiscFees")
private int miscFees;
@XmlElement(name="Idx")
private int idx;
@XmlElement(name="FareClass")
private String fareClass;
@XmlElement(name="FareType")
private String fareType;
@XmlElement(name="FareId")
private String fareId;
gettes and settersjaxb.index
SearchFlights
Flight
Flights
Leg
Legs
Outbound
Request
Response
WegoloSoapMessagepackage-info.java
@XmlSchema(
namespace = "ElsyArres.API",
elementFormDefault = XmlNsForm.QUALIFIED)
package com.myproject.flights.wegolo;
import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;响应
1

2

3.

4.

5

6

发布于 2016-01-21 16:06:17
似乎您正在手动创建bean,或者至少正在编辑它们。这两种情况都应避免。相反,您应该尝试使用可用的工具来为您生成Jaxb类和Soap客户机。两个非常常见的选项是春季网络服务或众所周知的Apache框架。
发布于 2016-01-16 09:45:26
错误消息声明,您正在尝试解析本地节点searchflightsresponse,您没有将其映射到类中作为注释。
您必须声明此节点,就像之前与另一个节点所做的那样。
请注意,这里使用jaxb解析soap响应是不可取的,因为这个结构(如您所见)并不简单。我建议下载wsdl并生成与and服务匹配的客户端存根。这样您就不需要注释数百个成员和类了。
另见此处:如何从WSDL文件生成java类
发布于 2016-01-26 19:55:58
您需要使用wsdl生成响应xml。构建一个响应xml,这也是如此之大的,必然会缺少元素。
这里有一个教程,你可以用它来开始,
http://www.mkyong.com/webservices/jax-ws/jax-ws-wsgen-tool-example/ http://www.mkyong.com/webservices/jax-ws/jax-ws-hello-world-example-document-style/
https://stackoverflow.com/questions/34825333
复制相似问题