2012-04-23 66 views
1

我在Java上有Soap WS。
這裏是SOAP請求SOAP請求。將字符串轉換爲字節數組

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:his="SCC/Lis/HistoryFormatter"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <his:formatHistoryByteArray> 
     <arg0>cid:anystring</arg0> 
     </his:formatHistoryByteArray> 
    </soapenv:Body> 
</soapenv:Envelope> 

FormatHistoryByteArray.class僅具有一個場

@XmlElement(name = "arg0", namespace = "", nillable = true) 
private byte[] arg0; 

鍵入* .XSD

<xs:complexType name="formatHistoryByteArray"> 
    <xs:sequence> 
     <xs:element name="arg0" type="xs:base64Binary" nillable="true" minOccurs="0"/> 
    </xs:sequence> 
    </xs:complexType> 

WSDL和由JAXWS生成的XSD。
我無法理解請求中的轉換字符串中的字節[]中java_code中的邏輯。幫助plz
cid:是否需要前綴?

被修改: 例如,如果我有請求

<arg0>abcdef</arg0> 

在Java代碼我得到字節[] = {105,-73,29}

的WebService如何得到這個字節數組來自字符串abcdef

+0

你的問題仍然不清楚。如果您希望將字符串轉換爲byte [],則使用'stringValue.getBytes()' – Bitmap 2012-04-23 13:25:16

+0

WebService會自動將字符串轉換爲byte [],但此結果與stringValue.getBytes()結果不同。 – Ilya 2012-04-23 13:34:31

+1

不,它不。您定義的'formatHistoryByteArray'的complexType是一個base64編碼值,您可以使用'org.apache.commons.codec.binary.Base64'或類似的方式將值解碼回byte []或object。 – Bitmap 2012-04-23 13:42:48

回答

3

String.getBytes()返回給定String的(ASCII,UTF8,ISO-8859-1等)編碼。這與Base 64不同。 Base 64是一種將任意字節顯示爲可打印字符的方式。所以他們沒有理由相同。

查看本教程的第2.1節有關Base 64和XML的部分:http://www.xml.com/pub/a/2003/02/26/binaryxml.html。基於64位位看起來是這樣的:

<m:data xmlns:m='http://example.org/people' > 
    <photo>/aWKKapGGyQ=</photo> 
    <sound>sdcfo2JTiXE=</sound> 
    <hash>Faa7vROi2VQ=</hash> 
</m:data> 

其中photo等數據爲base64元素。 cid前綴不是必需的。

要解決您的問題,abcdef正在被Web服務解組器解釋爲base-64編碼的字符串,作爲您收到的三個字節。

+0

它仍然不回答問題 – Bitmap 2012-04-23 13:52:39

+0

@Bitmap我已經更新了答案,盡我所能,因爲問題不清楚。 – artbristol 2012-04-23 13:55:46

0

模式明確聲明類型爲:「xs:base64Binary」aka:BINARY。如果您希望信息本質上是文本的,那麼類型應該是「xs:string」或類似的。

實際上,服務應完全拒絕「cid:anystring」的值。這不是base64編碼元素的有效值。

相關問題