2012-04-23 13 views
1

私はSoap WSをJava上に持っています。ここで
は、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; 

タイプを持っているWSDLとXSDがJAXWSによって生成される

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

を.XSD。
ノードの変換文字列の論理をjava-codeのバイト[]に要求することができません。ヘルプplz
cid:は、必要な接頭辞かどうかですか?

編集:例えば IはJavaコードで要求

<arg0>abcdef</arg0> 

を持っている場合、私は、WebServiceが、このバイト配列を取得する方法のバイト[] = {105、-73、29}

を得ます文字列からabcdef

+0

あなたの質問はまだ明確ではありません。文字列をbyte []に​​変換する場合は、stringValue.getBytes()を使用してください。 – Bitmap

+0

WebServiceは文字列をbyte []に​​自動的に変換しますが、この結果はstringValue.getBytes()の結果とは異なります。 – Ilya

+1

いいえ、そうではありません。 'formatHistoryByteArray'のために定義されたcomplexTypeはbase64でエンコードされた値です。' org.apache.commons.codec.binary.Base64'かそれに類するものを使用して、値をバイト[]またはオブジェクトにデコードします。 – Bitmap

答えて

3

String.getBytes()は、指定されたStringの(ASCII、UTF8、ISO-8859-1など)エンコードを返します。これは、Base 64とは異なります。ベース64は、印刷可能な文字として任意のバイトを表示する方法です。だから、彼らが同じである理由はありません。

このチュートリアルの2.1のBase64とXMLを参照してください。http://www.xml.com/pub/a/2003/02/26/binaryxml.html。 base64ビットは次のようになります。

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

ここで、photoなどはbase64要素です。 cid接頭辞は必要ありません。

あなたの質問に対処するために、abcdefは、Webサービスのunmarshallerによって、受け取った3バイトとしてベース64エンコードされた文字列として解釈されています。

+0

まだ質問に答えません。 – Bitmap

+0

@Bitmap質問がどのように不明であるかを考えれば、私は可能な限り答えを更新しました。 – artbristol

0

スキーマは、そのタイプを "xs:base64Binary" aka:BINARYとして明示的に宣言します。情報が本質的にテキストであることが予想される場合、そのタイプはおそらく "xs:string"またはそれに類するものでなければなりません。

実際には、サービスは「cid:anystring」の値を完全に拒否する必要があります。これはbase64でエンコードされた要素にとって有効な値ではありません。

関連する問題