仕様を満たしていないFaultを生成しているサーバーに対してSOAPクライアントを作成しています。具体的には、障害理由(spec)のText
要素にlang
属性がありません。私はSpring WS 2.4.0を使用しています。 SaajSoapMessage
に解析される前に、レスポンスを傍受して属性を挿入する方法はありますか?私はClientInterceptorを作成しようとしましたが、xmlはインターセプタにヒットした時点ですでに解析されています。私自身のMessageFactoryを作成する必要がありますか?不正な形式のSOAPエラーを処理します。
0
A
答えて
1
私はthis answerとthis answerの助けを借りてこれを解決しました。これは単にソースXMLを受け取り、XSL変換を介してそれを実行
@Override
public boolean handleFault(MessageContext messageContext) throws WebServiceClientException {
LOGGER.debug("intercepted a fault.");
TransformerFactory transformerFactory = TransformerFactory.newInstance();
WebServiceMessage response = messageContext.getResponse();
Source source = response.getPayloadSource();
StreamResult streamResult = new StreamResult(new StringWriter());
try {
Transformer displayTransformer = transformerFactory.newTransformer();
displayTransformer.transform(source, streamResult);
LOGGER.debug("\t>> initial response\n" + streamResult.getWriter().toString());
StreamSource xslSource = new StreamSource(new File(
FaultInterceptor.class.getResource("/SoapFaultFix.xsl").getFile()
));
Transformer modifyingTransformer = transformerFactory.newTransformer(xslSource);
modifyingTransformer.transform(source, response.getPayloadResult());
} catch (TransformerException e) {
e.printStackTrace();
}
return true;
}
:私は私のWebServiceGatewaySupport
をインスタンス化するとき
は、私はhandleFault()
方法を構成ClientInterceptor
を追加しました。コンテンツを失わないように、identity transformationで始まることが重要です。その後、属性と値を追加して、既存の値にドロップしました。私SoapFaultFix.xsl
はこのように見えた:私はDOMに掘削見つけたので、私はこのアプローチを気に入っ
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"
>
<xsl:template match="/ | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="//soapenv:Fault/soapenv:Reason/soapenv:Text">
<soapenv:Text>
<xsl:attribute name="xml:lang">en</xsl:attribute>
<xsl:value-of select="."/>
</soapenv:Text>
</xsl:template>
</xsl:stylesheet>
、純粋なJavaの持つ困難だった、と私は簡単に他の変更を行うことがXSLを拡張することができます。
関連する問題
- 1. 不正な形式のHTMLを処理します(終了タグなし)
- 2. PHPで不正な形式のJSONを処理する
- 3. .NET3.5で不正な形式のXMLを処理しています
- 4. Ruby to_jsonのエラーで「不正な/不正な形式のutf-8」
- 5. FasterCSVが不正な形式のエラー
- 6. Javaエラー:不正な形式の開始
- 7. 例外処理コードの不正な式エラー
- 8. 不正な形式
- 9. Laravel DataTablesは401の不正なエラーを処理します
- 10. Quantmodエラー処理不正なティッカー
- 11. NODE-SOAPエラー処理
- 12. 不正なJSONデータ形式
- 13. JSONデータを不規則な形式で処理していますか?
- 14. 美しいスープ不正な形式の開始タグのエラー
- 15. エラー:不正な形式のデータベーススキーマ(MmapStatus) - "(":構文エラー
- 16. 不正な形式のAccept-Language HTTPヘッダーを検出します。
- 17. c:forEachドメインモデルの不正な形式を返します
- 18. Javaの不正な形式の開始
- 19. 不正な形式のURLの特定
- 20. 不正な形式のURLへのリダイレクト
- 21. SOAP形式のSOAPレスポンスWSE
- 22. 不正な形式の開始NB
- 23. は、不正な形式のURI参照
- 24. Retrofit2不正な形式の応答
- 25. 不正な形式のJSONとjQuery
- 26. スフィンクス不正な形式のテーブル
- 27. Retrift APIで不正な形式のJSON?
- 28. Spotifyは不正な形式のJSON
- 29. 「不正な形式の」アンカータグRegex
- 30. CIDRブロック 'SG-1234' 不正な形式のエラーはboto3