首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用JAXB org.springframework.oxm.UnmarshallingFailureException解析XML消息

无法使用JAXB org.springframework.oxm.UnmarshallingFailureException解析XML消息
EN

Stack Overflow用户
提问于 2016-01-16 09:14:16
回答 3查看 658关注 0票数 12

我使用下面的代码来解析soap响应,但是我正在接收UnmarshallingFailureException,我将@XmlSeeAlso更改为@XMLRootElement,但问题仍然存在。WSDL是这里

代码语言:javascript
复制
  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>

代码语言:javascript
复制
   @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 setters

jaxb.index

代码语言:javascript
复制
SearchFlights
Flight
Flights
Leg
Legs
Outbound
Request
Response
WegoloSoapMessage

package-info.java

代码语言:javascript
复制
@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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-01-21 16:06:17

似乎您正在手动创建bean,或者至少正在编辑它们。这两种情况都应避免。相反,您应该尝试使用可用的工具来为您生成Jaxb类和Soap客户机。两个非常常见的选项是春季网络服务或众所周知的Apache框架

票数 1
EN

Stack Overflow用户

发布于 2016-01-16 09:45:26

错误消息声明,您正在尝试解析本地节点searchflightsresponse,您没有将其映射到类中作为注释。

您必须声明此节点,就像之前与另一个节点所做的那样。

请注意,这里使用jaxb解析soap响应是不可取的,因为这个结构(如您所见)并不简单。我建议下载wsdl并生成与and服务匹配的客户端存根。这样您就不需要注释数百个成员和类了。

另见此处:如何从WSDL文件生成java类

票数 3
EN

Stack Overflow用户

发布于 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/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34825333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档