1

JAX-WS RI を使用して Web サービスを作成しようとしています。このサービスには添付ファイルが含まれており、注釈が付けられています

@MTOM

また、ws-security usernameToken をチェックするハンドラも書きました。ログイン/パスワードが正しくない場合、ハンドラーはフォルトを生成し、それをクライアントに返します。クライアント側で mtom を有効にしようとしています:

((SOAPBinding)service).getBinding().setMTOMEnabled(true);

最後に私は例外を受け取ります:

Exception in thread "main" javax.xml.ws.WebServiceException: Missing Start Boundary, or boundary does not start on a new line
        at com.sun.xml.ws.encoding.MimeMultipartParser.getNextPart(MimeMultipartParser.java:148)
        at com.sun.xml.ws.encoding.MimeMultipartParser.getRootPart(MimeMultipartParser.java:89)
        at com.sun.xml.ws.encoding.SOAPBindingCodec.decode(SOAPBindingCodec.java:303)
        at com.sun.xml.ws.encoding.MimeCodec.decode(MimeCodec.java:116)
        at com.sun.xml.ws.encoding.SOAPBindingCodec.decode(SOAPBindingCodec.java:253)
        at com.sun.xml.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:152)
        at com.sun.xml.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:74)
        at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:559)
        at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:518)
        at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:503)
        at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:400)
        at com.sun.xml.ws.client.Stub.process(Stub.java:228)
        at com.sun.xml.ws.client.sei.SEIStub.doProcess(SEIStub.java:120)
        at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:226)
        at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:206)
        at com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:103)
        at $Proxy28.putContent(Unknown Source)
        at example.HelloWorldClient.main(HelloWorldClient.java:54)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)

誰かがこれを修正する方法を説明できますか?

更新: 調査によると、問題はサーバー側にあります:

サーバーから取得した応答には、境界 uuid を含む「マルチパート/関連」タイプもありますが、メッセージでは、この uuid は null です。応答をマルチパートでなくする方法、または正しく動作するようにハンドラーを設定する方法はありますか?

更新: 最終的に解決策が見つかりました(これは最適な方法ではありませんが、現時点ではこれが機能します):SoapHandler(javax.xml.ws.handler.soap.SOAPHandler)でマルチパートを無効にする方法がわかりませんが、SOAPMessageContextには持っているデータを書き込むことができる HttpServletResponse への参照。handleMessageOutputStream を閉じ、メソッドで false を返すことを忘れないでください。また、正しい CotnentType を設定する必要があります。このハックは、attachemtn をサーバーに送信するメソッドに対して機能しますが、応答がありません (私の場合、応答に障害があります)。

繰り返しますが、これは非常に「奇妙な」方法です。しかし、これは機能します。もっと良いものがあれば、このトピックに答えてください。

ありがとう

4

0 に答える 0