0

大きなファイルを受け取り、SOAP メッセージで指定された名前で保存する Web サービスを構築しようとしています。リクエストメッセージの例を次に示します

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sch="http://mywebservice.com.ua/bait/schemas" xmlns:xm="http://www.w3.org/2005/05/xmlmime">
   <soapenv:Header/>
   <soapenv:Body>
      <sch:SubmitProjectFileRequest>
         <sch:ProjectName>MyADProject.xml</sch:ProjectName>
         <sch:ProjectFile xm:contentType="text/text">cid:710420383131</sch:ProjectFile>
      </sch:SubmitProjectFileRequest>
   </soapenv:Body>
</soapenv:Envelope>

私はすでにいくつかのものを構築しました: OutOfMemoryError なしで大きな XOP ファイルを受け取ることができます。問題は、リクエストの ProjectName ノードにアクセスできないことです。それを取得しようとすると、添付ファイルがリクエストにインライン化されるためです。そして、それ自体が OutOfMemoryError につながります

これが私が現在その目的で使用しているコードです

@PayloadRoot(localPart = SUBMIT_PROJECT_FILE_REQUEST, namespace = NAMESPACE_URI)
public void handleSubmitProjectFileRequest(SoapMessage message) throws Exception {
    String projectName = getProjectName(message.getDocument());

    Attachment attachment = message.getAttachments().next();

    projectFileService.storeProjectFile(projectName, attachment.getDataHandler());
}

private String getProjectName(Document xml) throws XPathExpressionException {
    String prefix = xml.lookupPrefix(NAMESPACE_URI);

    NodeList names = xml.getElementsByTagName(String.format("%s:%s", prefix, "ProjectName"));

    String projectName = names.item(0).getTextContent();

    return projectName;
}

Spring WS と Axiom を使用して、大きな XOP 添付ファイルと ProjectName ノード コンテンツの両方を抽出するのを手伝ってくれる人はいますか?

前もって感謝します

4

1 に答える 1

1

私が読んだことから(申し訳ありませんが、合計2つのリンクしか投稿できませんでした):

そして、MTOM メソッドの詳細な定義によって:

  • www.crosschecknet.com/intro_to_mtom.php

SOAPHandler転送用に最適化されていますが、メッセージに添付する base64 でエンコードされたデータは、基本的なハンドラー (Likeなど) がデータを取得する前に非整列化され、soap メッセージに戻されます 。これは、この方法論の限界のようです。

あなたが言及したテクノロジーを使用すると、ソリューションの正しい軌道に乗ることができます(基本的なものSOAPMessageSOAPHandlers. AXIOM および spring で特殊化されたオブジェクトを使用すると、これを達成できるはずです。こちらの記事をチェックしてください: http://forum.springsource.org/archive/index.php/t-48343.html

ありがとう、KK

于 2012-03-09T14:54:29.247 に答える