t777
t777

Reputation: 3329

CXF: Multiple parts in soap header

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!

Upvotes: 0

Views: 736

Answers (2)

kaza
kaza

Reputation: 26

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;
 }}

Upvotes: 0

Related Questions