0

I need a soap header like this:

<MyHeader xmlns:foo="http://foourl" xmlns:bar="http://barurl" bar:someParam="true", otherParam="hereiam">WORLD</MyHeader>

I tried to create it like:

new SoapHeader(new QName("http://foourl", "MyHeader", "foo"),
                "WORLD", new JAXBDataBinding(String.class)));

But I just get

<MyHeader xmlns:foo="http://foourl">WORLD</MyHeader>

How can I set the other parts of the header (xmlns:bar, bar:someParam, otherParam)? TIA!

t777
  • 3,099
  • 8
  • 35
  • 53

2 Answers2

1

I found a solution for myself:

https://manoj29.wordpress.com/2011/12/29/apache-cxf-adding-custom-soap-headers-to-a-soap-message/

t777
  • 3,099
  • 8
  • 35
  • 53
0

Example:

private void addHeader(String localPart, String valueElement, QName attributeQname, String attributeValue, List<Header> headers) {
 var qname = new QName("http://www.w3.org/2005/08/addressing", localPart, "wsa");
 var soapElement = createSoapElement(qname, attributeQname, attributeValue, valueElement);
 headers.add(new Header(qname, soapElement));
}


private SOAPElement createSoapElement(QName elementQname, QName attributeQname, String attributeValue, String valueElement) {
 SOAPElement element = null;
 try {
  SOAPFactory factory = SOAPFactory.newInstance();
  element = factory.createElement(elementQname);
  if (Objects.nonNull(attributeQname) && Objects.nonNull(attributeValue))
    element.addAttribute(attributeQname, attributeValue);
  if (Objects.nonNull(valueElement))
    element.addTextNode(valueElement);
 } catch (SOAPException e) {
   log.error("Can not create new element", e);
 } finally {
   return element;
 }}
kaza
  • 26
  • 4