2017-01-30 9 views
5

私は、スキーマベースのペイロードを使用するjax-ws Webサービスを持っています。 MTOM添付ファイルの種類を追加:MTOMを使用したWebサービスからのjaxbのアンマーシャリングエラー

<xs:element name="Attachment" type="xs:base64Binary" 
      xmime:expectedContentTypes="application/octet-stream" 
      minOccurs="0" maxOccurs="1" > 
</xs:element> 

WS-輸入生成されたjavaファイルが正しいになります

@XmlRootElement(name = "Contact") 
public class Contact { 
    @XmlElement(name = "Attachment") 
    @XmlMimeType("application/octet-stream") 
    protected DataHandler attachment; 

リクエストを送信するためにあるsoapUIを使用しました。

HTTPヘッダ:次に

Accept-Encoding: gzip,deflate 
Content-Type: multipart/related; type=application/xop+xml; start=<[email protected]>; start-info=text/xml; boundary=----=_Part_96_20541990.1485816424570 
SOAPAction: http://hsn.us.banner.hsntech.com/Level1Request 
MIME-Version: 1.0 
Content-Length: 47624 
    [1]: https://i.stack.imgur.com/BEbZS.jpg 

エンコードされたファイルのセクションでHTTPの部分を参照してください。

------=_Part_96_20541990.1485816424570" 
Content-Transfer-Encoding: binary" 
Content-ID: <test1.jpg>" 
Content-Disposition: attachment; name="test1.jpg"; filename="test1.jpg"" 
[0xff][0xd8][0xff][0xe0][0x0][0x10]JFIF[0x0][0x1][0x1][0x1][0x0]`[0x0]`[0x0][0x0][0xff][0xdb][0x0]C[0x0][\n]"... etc... 

しかし、このエラーを取得しておいてください。

[Exception [EclipseLink-25004] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.XMLMarshalException&#xd; 
Exception Description: An error occurred unmarshalling the document&#xd; 
Internal Exception: java.lang.IllegalArgumentException: MjAxNi0wMS0wNVQwOTowMDowMA==]</faultstring></ns0:Fault></S:Body></S:Envelope> 

任意の提案ですか?

+0

WSDLのすべて、注釈は、HTTPヘッダーとHTTP部分が正しいようです。 MOXYバグかもしれません。標準JAXBコンテキストで試してみることをお勧めします。 –

+0

私たちはxoxyでjaxbオブジェクトから値を抽出するためにmoxyが提供するgetValueByXPath()関数のmoxy機能を使用しています。私は標準のJAXBがその能力を提供しているとは思わない。 – OldProgrammer

答えて

0

エラーメッセージは基本的に値MjAxNi0wMS0wNVQwOTowMDowMA==が不正であることを示しています。

2016-01-05T09:00:00 

あなたがアンマーシャリングしようとしているオブジェクト内の別のフィールドがある場合、私は知りません:あなたはそれをチェックすると、それはbase64エンコードされた日付です。しかし、アンマールプロセスが存在する場合、base64でエンコードされた値を処理することができません。どこかに必要なアダプタがあるかどうかを確認する必要があります。

1つの文で:デコードされたStringが実際にはバイナリデータではないため、base64デコーダを使用するか、元のサービスをチェックする必要があります。

(あなたは私がそれで、深さを見てかかることがあります使用されるコードのすべてを挿入した場合。)

+0

バイナリデータです。問題は、jaxbにインラインで含めるのではなく、オブジェクト定義の一部であるDataHandlerオブジェクトで拡張可能であることです。申し訳ありませんが、実際には私をさらに魅了しません。ありがとう。 – OldProgrammer

+0

'DataHandler'を' Object'に変更して、デバッグセッションで何が設定されているのか調べてみてください。なぜなら、エラーがいくつかのbase64でエンコードされた日付を表示している間に、ファイルの処理が問題であると思うのはなぜですか? – Mark

関連する問題