295.4. 例
以下に、ドキュメント、エレメント、およびコンテンツレベルでマーシャリングを実行する方法の例をいくつか示します。
295.4.1. フルペイロードの暗号化/復号化
from("direct:start")
.marshal().secureXML()
.unmarshal().secureXML()
.to("direct:end");295.4.2. 部分的なペイロードコンテンツのみの暗号化/復号化
String tagXPATH = "//cheesesites/italy/cheese";
boolean secureTagContent = true;
...
from("direct:start")
.marshal().secureXML(tagXPATH, secureTagContent)
.unmarshal().secureXML(tagXPATH, secureTagContent)
.to("direct:end");295.4.3. 部分的なマルチノードペイロードコンテンツのみの暗号化/復号化
String tagXPATH = "//cheesesites/*/cheese";
boolean secureTagContent = true;
...
from("direct:start")
.marshal().secureXML(tagXPATH, secureTagContent)
.unmarshal().secureXML(tagXPATH, secureTagContent)
.to("direct:end");295.4.4. passPhrase (password) の選択による部分的なペイロードコンテンツのみの暗号化/復号化
String tagXPATH = "//cheesesites/italy/cheese";
boolean secureTagContent = true;
...
String passPhrase = "Just another 24 Byte key";
from("direct:start")
.marshal().secureXML(tagXPATH, secureTagContent, passPhrase)
.unmarshal().secureXML(tagXPATH, secureTagContent, passPhrase)
.to("direct:end");295.4.5. passPhrase (password) と Algorithm を使用した部分的なペイロードコンテンツのみの暗号化/復号化
import org.apache.xml.security.encryption.XMLCipher;
....
String tagXPATH = "//cheesesites/italy/cheese";
boolean secureTagContent = true;
String passPhrase = "Just another 24 Byte key";
String algorithm= XMLCipher.TRIPLEDES;
from("direct:start")
.marshal().secureXML(tagXPATH, secureTagContent, passPhrase, algorithm)
.unmarshal().secureXML(tagXPATH, secureTagContent, passPhrase, algorithm)
.to("direct:end");295.4.6. 名前空間をサポートする部分的なペイロードコンテンツ
Java DSL
final Map<String, String> namespaces = new HashMap<String, String>();
namespaces.put("cust", "http://cheese.xmlsecurity.camel.apache.org/");
final KeyStoreParameters tsParameters = new KeyStoreParameters();
tsParameters.setPassword("password");
tsParameters.setResource("sender.ts");
context.addRoutes(new RouteBuilder() {
public void configure() {
from("direct:start")
.marshal().secureXML("//cust:cheesesites/italy", namespaces, true, "recipient",
testCypherAlgorithm, XMLCipher.RSA_v1dot5, tsParameters)
.to("mock:encrypted");
}
}Spring XML
camelContext 定義の一部として定義されている名前空間接頭辞は、secureXML 要素のデータ形式 secureTag 属性内のコンテキストで再利用できます。
<camelContext id="springXmlSecurityDataFormatTestCamelContext"
xmlns="http://camel.apache.org/schema/spring"
xmlns:cheese="http://cheese.xmlsecurity.camel.apache.org/">
<route>
<from uri="direct://start"/>
<marshal>
<secureXML secureTag="//cheese:cheesesites/italy"
secureTagContents="true"/>
</marshal>
...295.4.7. 対称キーの暗号化
Spring XML Sender
<!-- trust store configuration -->
<camel:keyStoreParameters id="trustStoreParams" resource="./sender.ts" password="password"/>
<camelContext id="springXmlSecurityDataFormatTestCamelContext"
xmlns="http://camel.apache.org/schema/spring"
xmlns:cheese="http://cheese.xmlsecurity.camel.apache.org/">
<route>
<from uri="direct://start"/>
<marshal>
<secureXML secureTag="//cheese:cheesesites/italy"
secureTagContents="true"
xmlCipherAlgorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc"
keyCipherAlgorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5"
recipientKeyAlias="recipient"
keyOrTrustStoreParametersId="trustStoreParams"/>
</marshal>
...Spring XML 受信者
<!-- key store configuration -->
<camel:keyStoreParameters id="keyStoreParams" resource="./recipient.ks" password="password" />
<camelContext id="springXmlSecurityDataFormatTestCamelContext"
xmlns="http://camel.apache.org/schema/spring"
xmlns:cheese="http://cheese.xmlsecurity.camel.apache.org/">
<route>
<from uri="direct://encrypted"/>
<unmarshal>
<secureXML secureTag="//cheese:cheesesites/italy"
secureTagContents="true"
xmlCipherAlgorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc"
keyCipherAlgorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5"
recipientKeyAlias="recipient"
keyOrTrustStoreParametersId="keyStoreParams"
keyPassword="privateKeyPassword" />
</unmarshal>
...