2012-07-11 43 views
1

我正在使用JAXB編組肥皂請求。它正在工作,但生成的XML不包含soap:Envelope標記。此外,該名稱空間在根元素上而不是在soap:Envelope標記中指示。 xml標籤上還有一個額外的standalone屬性。如何使用JAXB的編組器實現類似於第二個XML的輸出?如何在使用JAXB進行封送時包含肥皂信封標籤?

目前,這裏是我的編組XML看起來像:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<Customer xmlns:ns="http://www.example.org/beanLevelNamespace"> 
    <ns:id>201200001</ns:id> 
    <ns:name>Name</ns:name> 
    <ns:age>18</ns:age> 
</Customer> 

這裏是我多麼希望它看起來像:

<?xml version="1.0" encoding="UTF-8"?> 
<soap:Envelope 
    xmlns:soap="http://www.w3.org/2001/12/soap-envelope" 
    soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> 
    <soap:Body xmlns:ns="http://www.example.org/beanLevel1Namespace" xmlns:ns1="http://www.example.org/beanLevel2Namespace"> 
     <ns:Customer> 
      <ns1:id>201200001</ns:id> 
      <ns1:name>Name</ns:name> 
      <ns1:age>18</ns:age> 
     </ns:Customer> 
    </soap:Body> 
</soap:Envelope> 
+0

爲什麼你需要在你的XML信封?另外,如果名稱空間存在於根級或Envelope中,它又有什麼關係? – sreehari 2012-07-11 03:50:18

+0

@sreehari:它需要在信封裏面,因爲我要將它作爲肥皂請求發送。關於名稱空間的位置,我不確定它的位置是否重要。我在這裏的示例請求中的名稱空間位於信封內,因此我只是爲了安全起見而遵循它。 – Arci 2012-07-11 04:04:47

+0

爲什麼你不使用JAX-WS呢? – 2014-01-25 07:08:39

回答

1

您可以在發送前添加一個信封內的XML。

"<Envelope><Body>" + your_xml + "</Body></Envelope> 

始終將您的名稱空間保留在元素級別;不在信封級別。因爲當你看一個元素時,你會清楚它是什麼類型的。你保留名字空間的位置並不重要。

編組的XML存在問題。正確的XML是:

<ns:Customer xmlns:ns="http://www.example.org/beanLevelNamespace"> 
    <ns:id>201200001</ns:id> 
    <ns:name>Name</ns:name> 
    <ns:age>18</ns:age> 
</ns:Customer> 

同樣,也不要緊,你把空間聲明:

<ns:Customer xmlns:ns="http://www.example.org/beanLevelNamespace"> 
    <ns:id>201200001</ns:id> 
</ns:Customer> 

<Customer xmlns="http://www.example.org/beanLevelNamespace"> 
    <id>201200001</id> 
</Customer> 

<ns1:Customer xmlns:ns1="http://www.example.org/beanLevelNamespace"> 
    <ns2:id xmlns:ns2="http://www.example.org/beanLevelNamespace">201200001</ns2:id> 
</ns1:Customer> 

他們都是一樣的。

+0

謝謝!我認爲有一種方法可以讓JAXB也生成肥皂信封?或者JAXB沒有這種設置?另外,如果我只是在編組XML文件中添加肥皂標籤,標籤將包含在肥皂信封中。我可以設置JAXB不在生成的xml中包含標記嗎? – Arci 2012-07-11 05:17:15

+1

JAX-B是一個XML處理API。它可以處理任何XML。爲了調用Web服務,您將使用另一個API - 最好是JAX-WS。不要混合這兩樣東西。你爲什麼想在代碼中處理SOAP信封?這將在JAX-WS的背後完成。 – sreehari 2012-07-11 05:55:06

+0

我們已經有一個調用Web服務的類。但是,它只能作爲Web服務的連接器。爲了起作用,整個SOAP信封和信封內容必須傳遞給所述課程。因此,我需要與信封的內容一起創建SOAP信封並將其傳遞給所述課程。我們沒有使用JAX-WS。 – Arci 2012-07-11 06:24:26

相關問題