我有一个规范要求SOAP主体看起来像下面的例子。根据我对JAX-RS的理解(参见this page),这涉及到创建主体的“封装签名”,但我没有找到有关JAX-WS创建的封装签名的文档。
我尝试指定要签名的各个部分会导致额外的xml出现在标题中,但我无法确定如何签署身体的一部分并让签名出现在正文中。另请注意,签名是我给出的示例中bodyComponent
的子元素。
<soap:Body xmlns:wsu="http://some.xsd" wsu:Id="id-2">
<ns2:requestDef xmlns:ns2="http://some-namespace" xmlns="http://another-namespace" xmlns:ns4="http://yet-another-namespace">
<bodyComponent xmlns = "urn:a:namespace">
<bodySubComponent>TEST-01</bodySubComponent>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
<Reference URI="">
<Transforms>
<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
</Transforms>
<DigestMethodAlgorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
<DigestValue>+d1GesY2VzMS8wFAYDVQQD=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>+s1GesY2VzMS8wFAYDVQQD= +d1GesY2VzMS8wFAYDVQQD= +d1GesY2VzMS8wFAYDVQQD= +d1GesY2VzMS8wFAYDVQQD= +d1GesY2VzMS8wFAYDVQQD=</SignatureValue>
<KeyInfo>
<X509Data>
<X509SubjectName>CN=A,OU=B,OU=C, OU=D,O=E,C=F</X509SubjectName>
<X509Certificate>+x509Y2VzMS8wFAYDVQQD=</X509Certificate>
</X509Data>
</KeyInfo>
</Signature>
</bodyComponent>
</ns2:requestDef>
</soap:Body>
使用WSHandlerConstants.SIGNATURE_PARTS
所有值都显示在Header
中。我正在尝试通过CXF做什么?