大きなファイルを受け取り、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 ノード コンテンツの両方を抽出するのを手伝ってくれる人はいますか?
前もって感謝します