Вроде работает
| Код | package test.rt.eu.nr;
import java.io.StringWriter; import java.nio.charset.StandardCharsets; import javax.xml.soap.SOAPElement; import javax.xml.soap.SOAPFactory; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.apache.xml.security.c14n.Canonicalizer; import org.junit.Test;
public class XmlCanonTest {
@Test public void name() throws Exception {
org.apache.xml.security.Init.init();
SOAPFactory factory = SOAPFactory.newInstance(); SOAPElement securityElem = factory.createElement("Security"); securityElem.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"); SOAPElement tokenElem = factory.createElement("UsernameToken"); tokenElem.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns", ""); securityElem.addChildElement(tokenElem);
byte[] canonicalizeSubtree = Canonicalizer.getInstance(Canonicalizer.ALGO_ID_C14N_EXCL_OMIT_COMMENTS) .canonicalizeSubtree(securityElem, "", false);
System.out.println(new String(canonicalizeSubtree, StandardCharsets.UTF_8));
try { Transformer transformer = TransformerFactory.newInstance().newTransformer(); StringWriter stringWriter = new StringWriter(); transformer.transform(new DOMSource(securityElem), new StreamResult(stringWriter)); System.out.println(stringWriter.toString()); } catch (TransformerException e) { e.printStackTrace(); } } }
|
| Цитата | Может быть есть способ каким то образом "вручную" отредактировать сформированный SOAPElement или составленный из них SOAPHeader?
|
Делали как-то такое, использовали XPathAPI из Apache Xalan. |