5

Webサービスを開発し、Axisでデプロイしました。すべてが非常に正常に実行されていますが、印刷できない文字(ETX、FSなど)を含む文字列を使用してサービスを使用すると問題が発生します。次のエラーがあります:

exception: java.lang.IllegalArgumentException: The char '0x1c' after '....' is not a valid XML character.

何かアイデアはありますか?

編集 :

Webサービスを使用してサーバーにフレームを送信する必要があります。私のフレームは厳密な形式です(区切り文字として印刷できない文字を含みます)

class Automate {void checkFrame(String frame){// checking the frame}}

wsdlファイル

<?xml version="1.0" encoding="UTF-8"?>

  <wsdl:part element="impl:checkFrameResponse" name="parameters"/>

  <wsdl:part element="impl:checkFrame" name="parameters"/>

  <wsdl:operation name="checkFrame">

     <wsdl:input message="impl:checkFrameRequest" name="checkFrameRequest"/>

     <wsdl:output message="impl:checkFrameResponse" name="checkFrameResponse"/>

  </wsdl:operation>

  <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>

  <wsdl:operation name="checkFrame">

     <wsdlsoap:operation soapAction=""/>

     <wsdl:input name="checkFrameRequest">

        <wsdlsoap:body use="literal"/>

     </wsdl:input>

     <wsdl:output name="checkFrameResponse">

        <wsdlsoap:body use="literal"/>

     </wsdl:output>

  </wsdl:operation>

  <wsdl:port binding="impl:AutomateSoapBinding" name="Automate">

     <wsdlsoap:address location="http://localhost:8080/Gateway/services/Automate"/>

  </wsdl:port>

4

4 に答える 4

3

これはSOAPの自然な問題ですが、残念ながら、テキストにXMLを使用しており、これらの文字をXMLで表すことはできません(エンティティを使用している場合でも)。

印刷できない文字をなんとかしてエスケープできますか?残念ながら、それらをストレートテキストとして表現しない方法を見つける必要があります。

于 2009-05-21T15:01:38.667 に答える
1

xml 構造の一部ではないデータ (つまり、コンテンツ) には CDATA を使用します。正しく理解し、メッセージをルーティングするだけの場合は、これを行う必要があります。

于 2009-08-05T20:46:14.353 に答える
1

SOAP XML エンベロープの中に入れる XML を作成するときは、属性値と要素内のテキスト ノードにエスケープされていない文字が含まれていないことを確認する必要があります。あれは:

<your_elt your_attr="Don&apos;t put unescaped chars here, eg, apostrophe">
    <foo>
        Be sure to escape stuff here too, like: 2 &lt; 100
        A greek lambda is escaped like this: &#955;
    </foo>
</your_elt>

Javaでこれを行っていると思われるので、これを自動的に行うライブラリを調べる必要があります。たとえば、 ApacheにはStringEscapeUtilsがあります。

制御文字は、XML数値参照によってエスケープする必要があります。うまくいけば、StringEscapeUtils がそれを処理してくれます。

お役に立てれば。

于 2009-05-22T03:14:19.280 に答える
0

XML で表現できないテキストがあるようです。これらの文字をエスケープする必要がありますが、正直なところ、文字列全体を「エスケープ」する必要があると思います。文字列の Base64 エンコードは機能する可能性がありますが、MTOM や、Web サービス間でバイナリ データを渡すその他のメカニズムを検討することもできます。

このシステムの両側 (クライアントと Web サービス) を所有している場合、エンコード/デコードの手順を追加することはそれほど難しくなく、base64 エンコードで十分です。

于 2009-05-21T15:52:09.923 に答える