2

JavaでSoap WSを使用しています。
ソープリクエストはこちら

<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 には 1 つのフィールドしかありません

@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 と xsd は JaxWS によって生成されます。
の変換文字列の論理がわかりませんjava-code の byte[] への要求のノード。ヘルプplz
cid:必要な接頭辞ですか?

編集 済み:たとえば、リクエストがある場合

<arg0>abcdef</arg0>  

Javaコードでは、byte [] = {105、-73、29}を取得します

WebService が文字列abcdefからこのバイト配列を取得する方法

4

2 に答える 2

4

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

Base 64 と XML に関するこのチュートリアルのセクション 2.1 をご覧ください: 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 サービス アンマーシャラーによって、受信した 3 バイトとして base-64 でエンコードされた文字列として解釈されています。

于 2012-04-23T13:46:43.390 に答える
0

スキーマは、タイプを「xs:base64Binary」別名: BINARY として明示的に宣言します。情報が本質的にテキストであると予想される場合、タイプは「xs:string」または類似のものである可能性があります。

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

于 2012-04-23T20:47:51.730 に答える