当前位置: 首页 > 知识库问答 >
问题:

如何使用JAXB解组定制xml命名空间?

沈栋
2023-03-14

在JAXB将xml文件解组以请求对象并将其发送给servis时,我遇到了一些问题。

它返回错误而不是正确的响应-未知用户

我正在使用下一个模式:

带有测试日期的xml文件=

以下是源xml文件:

<OTA_AirLowFareSearchRQ EchoToken="50987" SequenceNmbr="1" Target="Production" TimeStamp="2003-11-19T19:44:10-05:00"
                        Version="2.001"
                        xsi:schemaLocation="http://www.opentravel.org/OTA/2003/05 OTA_AirLowFareSearchRQ.xsd"
                        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                        xmlns="http://www.opentravel.org/OTA/2003/05">

    <POS>
        <TPA_Extensions>
            <TPA_Extension>
                <PromoRatesRequired Value="false"/>
                <UserName Value="342561"/>
                <UserPassword Value="1234"/>
                <ClearCache Value="true"/>
            </TPA_Extension>
        </TPA_Extensions>
    </POS>

    <OriginDestinationInformation>
        <DepartureDateTime>2015-04-13T00:00:00</DepartureDateTime>
        <OriginLocation LocationCode="DUB"/>
        <DestinationLocation LocationCode="CDG"/>
    </OriginDestinationInformation>

    <TravelPreferences>
        <CabinPref PreferLevel="Preferred" Cabin="Economy"/>
    </TravelPreferences>

    <TravelerInfoSummary>
        <AirTravelerAvail>
            <PassengerTypeQuantity Code="ADT" Quantity="1"/>
            <PassengerTypeQuantity Code="CHD" Quantity="0"/>
            <PassengerTypeQuantity Code="INF" Quantity="1"/>
        </AirTravelerAvail>
    </TravelerInfoSummary>
</OTA_AirLowFareSearchRQ>

我使用JAXB解析并转换到我的RQ对象。

它返回奇怪的错误而不是响应。

我只是将未解析的请求写入xml文件:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<ns1:OTA_AirLowFareSearchRQ xmlns:ns1="http://www.opentravel.org/OTA/2003/05" Version="2.001" EchoToken="50987"
                            SequenceNmbr="1" TimeStamp="2003-11-20T00:44:10.000Z" Target="Production"
                            DirectFlightsOnly="false">
    <ns1:POS>
        <ns1:TPA_Extensions>
            <ns1:TPA_Extension>
                <ns1:PromoRatesRequired Value="false"/>
                <ns1:UserName Value="342561"/>
                <ns1:UserPassword Value="1234"/>
                <ns1:ClearCache Value="true"/>
            </ns1:TPA_Extension>
        </ns1:TPA_Extensions>
    </ns1:POS>
    <ns1:OriginDestinationInformation>
        <ns1:DepartureDateTime>2015-04-13T00:00:00</ns1:DepartureDateTime>
        <ns1:OriginLocation LocationCode="DUB" CodeContext="IATA"/>
        <ns1:DestinationLocation LocationCode="CDG" CodeContext="IATA"/>
    </ns1:OriginDestinationInformation>
    <ns1:TravelPreferences OriginDestinationRPHs="" ETicketDesired="false" SmokingAllowed="false">
        <ns1:CabinPref PreferLevel="Preferred" Cabin="Economy"/>
    </ns1:TravelPreferences>
    <ns1:TravelerInfoSummary>
        <ns1:AirTravelerAvail>
            <ns1:AirTravelerAvail>
                <ns1:PassengerTypeQuantity Code="ADT" Quantity="1"/>
                <ns1:PassengerTypeQuantity Code="CHD" Quantity="0"/>
                <ns1:PassengerTypeQuantity Code="INF" Quantity="1"/>
            </ns1:AirTravelerAvail>
        </ns1:AirTravelerAvail>
    </ns1:TravelerInfoSummary>
    <ns1:dataStatus>SUCCESS_LOW_FARE_SEARCH_REQUEST</ns1:dataStatus>
</ns1:OTA_AirLowFareSearchRQ>

它有很多讨厌的ns1:nameprefix。

我想知道如何在没有冗余前缀的情况下解组?

共有1个答案

柳项明
2023-03-14

您可以使用以下包级别@XmlSchema注释正确映射XML文档中的命名空间限定。包级别注释放在一个名为Package-info的特殊类中。

package.info.java

下面是包信息类的完整源代码。

@XmlSchema( 
    namespace = "http://www.opentravel.org/OTA/2003/05", 
    elementFormDefault = XmlNsForm.QUALIFIED) 
package example;

import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;

以下是我博客上的帖子链接,您可能会发现有用:

  • http://blog.bdoughan.com/2010/08/jaxb-namespaces.html
 类似资料:
  • 我的代码如下: 我怎样才能让它工作?如果我的xml标记有一些相关元素,如上面的“xmlns”,则JAXB解组器会抛出异常。 这是我第一次这么做,所以我对JAXB、解编等都一无所知。我在苦苦挣扎任何帮助都是好的。 编辑StackTrace:

  • 我有下面的,我试图使用JAXB将其转换为Java对象。我在这里得到空值,请指导我这里缺少什么或做错了什么。 我不熟悉 JAXB 和命名空间

  • 首先,我使用Camel 2.15版(在Fuse 6.2.1中)创建了一些路由。 在我的过程中,我试图从使用cxf xjc maven插件生成的pojo中创建一个XML(cxf xjc从xsd的某个地方读取了一些xsd,然后生成了带有jaxb注释的pojo)。 pojos是TempProject和TempProjects。 我可以使用以下代码生成xml: 我打电话 在我实现从pojo到xml的编组的

  • 我有一个为安全令牌构建的XML。这些包含基于WS-Trust的名称空间,但是当我解组这个XML以创建< code > RequestSecurityTokenResponseCollection 对象时,它用< code>ns1 、< code>ns2 、< code>ns3等名称空间替换了这些名称空间。 是否有一种方法可以在不更改输入XML中的名称空间和名称空间前缀的情况下解组XML? 这是我一

  • 我正在尝试使用JAXB解组一个xml文件。当我使用具有正确名称和命名空间的@XmlElement时,解组工作(例如@XmlElement(name=“name”,namespace=”http://www.test.com")) xml文件(test.xml)的内容: JAXBExample.java的内容是: 内容 包装stackoverflow.problem.jaxb.ns; 如果我取消注释

  • 供应商提供的XML如下: 请注意,没有声明,供应商也没有提供模式。这不能更改,供应商将来会继续这样发布XML。 为了生成JAXB绑定,我创建了如下模式: 请注意,我已经声明了一个或多或少有意义的命名空间(“http://acme.com/schema”),以便它可以用于元素引用等。XJC 生成以下: 然后,我尝试解组XML文档: 我得到的例外是: 显然,这是因为XML元素属于一个空的名称空间,而J