[resolved] SOAP header in tJavaRow

Highlighted
One Star

[resolved] SOAP header in tJavaRow

Hi
I wanted to access the soap headers from a tESBProviderRequest. I have the tESBReq connected to a tJavaRow and then connected to a tXmlMap but it doesnt necessarily have to be like this, I am just looking to extract the header values.
My request envelope looks like this 

<Envelope xmlns="">
    <Header>
        <securityHeader xmlns="">
            <username xmlns=""></username>
            <hased_password xmlns=""></hased_password>
        </securityHeader>
    </Header>
    <Body>
        <getRequest xmlns="">
            <ID xmlns="">100103308911W600</ID>
        </getRequest>
    </Body>
</Envelope>  
How can I retrieve the values of username and password from the header? 
When I print out the input_row it only prints out the body, no headers.
I did try a couple of other threads which suggested "((java.util.Collection<org.apache.cxf.headers.Header>) globalMap.get("tESBProviderRequest_1_HEADERS_SOAP"))" however I cant figure out the way to extract the values.
Appreciate the help.
Thanks

Accepted Solutions
One Star

Re: [resolved] SOAP header in tJavaRow

Hello,
I could do it like this :
java.util.Collection<org.apache.cxf.headers.Header> soapHeaders =
((java.util.Collection<org.apache.cxf.headers.Header>) globalMap.get("tESBProviderRequest_1_HEADERS_SOAP"));
java.util.Iterator<org.apache.cxf.headers.Header> it = soapHeaders.iterator();
org.apache.cxf.headers.Header h = (org.apache.cxf.headers.Header) it.next(); 
/*get the key*/
Node n1;
row2.key =  ((Element) h.getName());
/*get the value*/
org.w3c.dom.NodeList nl = ((org.w3c.dom.Element) h.getObject()).getChildNodes();
row2.value = nl.item(0).getTextContent().toString();
/*if you have multiple items*/
org.apache.cxf.headers.Header h = (org.apache.cxf.headers.Header) it.next();
.....

All Replies
One Star

Re: [resolved] SOAP header in tJavaRow

Any responses? I have the same problem
One Star

Re: [resolved] SOAP header in tJavaRow

I ended up just doing this but I would still like to explore a neater refactor of the implementation if possible:
java.util.Collection<org.apache.cxf.headers.Header> soapHeaders = ((java.util.Collection<org.apache.cxf.headers.Header>) globalMap.get("tESBProviderRequest_1_HEADERS_SOAP"));
Iterator<org.apache.cxf.headers.Header> it = soapHeaders.iterator();
org.apache.cxf.headers.Header h = (org.apache.cxf.headers.Header) it.next();
Node n1,n2;
n1 =  ((Element) h.getObject());
NodeList nl = ((Element) h.getObject()).getChildNodes();
var1 = nl.item(1 /* Just trial and error to get this number */ ).getTextContent().trim();   
var2 = nl.item(3 /* same here */ ).getTextContent().trim();  
One Star

Re: [resolved] SOAP header in tJavaRow

Hello,
I could do it like this :
java.util.Collection<org.apache.cxf.headers.Header> soapHeaders =
((java.util.Collection<org.apache.cxf.headers.Header>) globalMap.get("tESBProviderRequest_1_HEADERS_SOAP"));
java.util.Iterator<org.apache.cxf.headers.Header> it = soapHeaders.iterator();
org.apache.cxf.headers.Header h = (org.apache.cxf.headers.Header) it.next(); 
/*get the key*/
Node n1;
row2.key =  ((Element) h.getName());
/*get the value*/
org.w3c.dom.NodeList nl = ((org.w3c.dom.Element) h.getObject()).getChildNodes();
row2.value = nl.item(0).getTextContent().toString();
/*if you have multiple items*/
org.apache.cxf.headers.Header h = (org.apache.cxf.headers.Header) it.next();
.....

2019 GARNER MAGIC QUADRANT FOR DATA INTEGRATION TOOL

Talend named a Leader.

Get your copy

OPEN STUDIO FOR DATA INTEGRATION

Kickstart your first data integration and ETL projects.

Download now

What’s New for Talend Summer ’19

Watch the recorded webinar!

Watch Now

An API-First Approach to Modernizing Applications

Learn how to use an API-First Approach to Modernize your Applications

Watch Now

Talend API Designer – Technical Overview

Take a look at this technical overview video of Talend API Designer

Watch Now

Getting Started with APIs

Find out how to get started with APIs

Read