java - 为什么这些 xml 文件会得到不同的响应?

标签 java xml web-services xmlhttprequest

这两个xml文件的意思是一样的吗?

第一个文件:

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" >
   <S:Body>
      <ProcessData xmlns="http://arinc/asd/OnvoyRegistration">
         <document><request xmlns="http://arinc/asd/OnvoyRegistration">
        <hotelChain>Disney</hotelChain>
        <processType>ModifyGuest</processType>
        <hotelLineId>ASMU03042015</hotelLineId>
        <firstName>NICOLE</firstName>
        <lastName>ROLAIN</lastName>
        <numberOfBags>1</numberOfBags>
        <status>enrolled</status>
        <hotelGuestId>41955886</hotelGuestId>
        <room>5613</room>
        <eligible>1</eligible>
        <partyGroupId>0</partyGroupId>
        <arrivalDate>2015-02-26</arrivalDate>
        <departureDate>2015-03-04</departureDate>
        <segments>
          <segment>
              <carrier>WN</carrier>
              <flightNumber>4280</flightNumber>
              <departureCity>MCO</departureCity>
              <departureDate>2015-03-04</departureDate>
              <departureTime>12:00 PM</departureTime>
              <operation>Add</operation>
           </segment>
        </segments>
    </request>
    </document>
      </ProcessData>
   </S:Body>
</S:Envelope>

回应:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">    <soap:Body>
      <ProcessDataResponse xmlns="http://arinc/asd/OnvoyRegistration">
         <ProcessDataResult>
            <response xmlns="">Invalid Process Type</response>
         </ProcessDataResult>
      </ProcessDataResponse>    </soap:Body> </soap:Envelope>

第二个文件:

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:onv="http://arinc/asd/OnvoyRegistration">
   <S:Body>
      <onv:ProcessData>
         <onv:document><request>
        <hotelChain>Disney</hotelChain>
        <processType>ModifyGuest</processType>
        <hotelLineId>ASMU03042015</hotelLineId>
        <firstName>NICOLE</firstName>
        <lastName>ROLAIN</lastName>
        <numberOfBags>1</numberOfBags>
        <status>enrolled</status>
        <hotelGuestId>41955886</hotelGuestId>
        <room>5613</room>
        <eligible>1</eligible>
        <partyGroupId>0</partyGroupId>
        <arrivalDate>2015-02-26</arrivalDate>
        <departureDate>2015-03-04</departureDate>
        <segments>
          <segment>
              <carrier>WN</carrier>
              <flightNumber>4280</flightNumber>
              <departureCity>MCO</departureCity>
              <departureDate>2015-03-04</departureDate>
              <departureTime>12:00 PM</departureTime>
              <operation>Add</operation>
           </segment>
        </segments>
    </request>
    </onv:document>
      </onv:ProcessData>
   </S:Body>
</S:Envelope>

回应:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <soap:Body>
      <ProcessDataResponse xmlns="http://arinc/asd/OnvoyRegistration">
         <ProcessDataResult>
            <response xmlns="">OK</response>
         </ProcessDataResult>
      </ProcessDataResponse>
   </soap:Body>
</soap:Envelope>

我认为这两个 XML 文件代表相同的信息。但是当我使用这两个文件访问 SOAP Web 服务时,我得到了不同的响应。

我也尝试过这个:

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:onv="http://arinc/asd/OnvoyRegistration">
   <S:Body>
      <onv:ProcessData>
         <onv:document><onv:request>
        <onv:hotelChain>Disney</onv:hotelChain>
        <onv:processType>ModifyGuest</onv:processType>
        <onv:hotelLineId>ASMU03042015</onv:hotelLineId>
        <onv:firstName>NICOLE</onv:firstName>
        <onv:lastName>ROLAIN</onv:lastName>
        <onv:numberOfBags>1</onv:numberOfBags>
        <onv:status>enrolled</onv:status>
        <onv:hotelGuestId>41955886</onv:hotelGuestId>
        <onv:room>5613</onv:room>
        <onv:eligible>1</onv:eligible>
        <onv:partyGroupId>0</onv:partyGroupId>
        <onv:arrivalDate>2015-02-26</onv:arrivalDate>
        <onv:departureDate>2015-03-04</onv:departureDate>
        <onv:segments>
          <onv:segment>
              <onv:carrier>WN</onv:carrier>
              <onv:flightNumber>4280</onv:flightNumber>
              <onv:departureCity>MCO</onv:departureCity>
              <onv:departureDate>2015-03-04</onv:departureDate>
              <onv:departureTime>12:00 PM</onv:departureTime>
              <onv:operation>Add</onv:operation>
           </onv:segment>
        </onv:segments>
    </onv:request>
    </onv:document>
      </onv:ProcessData>
   </S:Body>
</S:Envelope>

回应:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <soap:Body>
      <ProcessDataResponse xmlns="http://arinc/asd/OnvoyRegistration">
         <ProcessDataResult>
            <response xmlns="">Invalid Process Type</response>
         </ProcessDataResult>
      </ProcessDataResponse>
   </soap:Body>
</soap:Envelope>

最佳答案

不,它们不一样。

不带前缀的命名空间声明声明所谓的默认命名空间。默认命名空间应用于声明它的元素以及所有子元素。

所以在下面的 XML 片段中

<parent xmlns="namespace">
    <child />
</parent>

both - 父元素和子元素都在给定的命名空间中。

另一方面,在下面的 XML 片段中

<pre:parent xmlns:pre="namespace">
    <child />
</pre:parent>

您有一个使用前缀声明的命名空间。此命名空间仅适用于那些显式带有该前缀的元素。在此示例中,它只有 parent 元素,而 child 元素没有命名空间。

<小时/>

在您的 XML 文档中,您有类似的情况:

<ProcessData xmlns="http://arinc/asd/OnvoyRegistration">
    <document>
        <request xmlns="http://arinc/asd/OnvoyRegistration">
            ...
        </request>
    </document>
</ProcessData>

对比

<onv:ProcessData>
     <onv:document>
         <request>
            ...
        </request>
    </onv:document>
</onv:ProcessData>

前缀onv代表与上面相同的命名空间。

在第二个文档中,由于缺少前缀,request 元素没有命名空间。在第一个文档中,它位于层次结构中声明较高的默认命名空间中。事实上,request 元素中的命名空间声明是多余的(在第一个文档中)。

关于java - 为什么这些 xml 文件会得到不同的响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30922040/

相关文章:

java - lambda 中的控制反转

xml - 如何在 XSD 中定义一个简单的元素和属性

html - HTML,XMLNS, namespace ,XML

php - 检查 WS* 服务器实现中的签名

java - 重定向到youtube以上传可在jsp上使用的视频

java - guice 将类型绑定(bind)到未知类型但匹配类型

java - Jetty 列出端口 80 上的应用程序,该应用程序通常位于另一个端口上

java - 如何管理 QuickBooks XML 的额外 xml 声明

java - 如何保护 Web 服务位置的安全?

java - 在查询中使用带间隔的 prepareStatement 时出错