Hai All,
I have a wsdl with a single service and many operations.
The typical payload for an operation will look like this
<soapEnv:Envelope>
<soapEnv:Header>
<sessonId>123123123141341</sessionId>
<source>32312312312312</source>
<security>
<usernameToken>
<userName>afjlksdajflas</userName>
<password>fsdakljfaskljf</password>
</usernameToken>
</security>
<soapEnv:Header>
<soapEnv:Body>
</soapEnv:Body>
</soapEnv:Envelope>
wsdl fragments corrosponding to that are given here
<wsdl:types>
<xsd:schema
targetNamespace="xxxx"
elementFormDefault="qualified">
<xsd:include schemaLocation="wsdl_types.xsd" />
<xsd:element name="sessionid" type="xsd:string" />
<xsd:element name="source" type="xsd:string" />
</xsd:schema>
</wsdl:types>
<!-- Message definitions -->
<wsdl:message name="session">
<wsdl:part name="sessionTokenHeader" element="types:sessionid" />
</wsdl:message>
<wsdl:message name="security">
<wsdl:part name="usernameTokenHeader" element="wsse:Security" />
</wsdl:message>
<wsdl:message name="source">
<wsdl:part name="sourceTokenHeader" element="types:source" />
</wsdl:message>
<wsdl:operation name="myoperation">
<wsdl:input>
<wsdlsoap:header message="tns:session"
part="sessionTokenHeader" use="literal" />
<wsdlsoap:header message="tns:security"
part="usernameTokenHeader" use="literal" />
<wsdlsoap:header message="tns:source"
part="sourceTokenHeader" use="literal" />
<wsdlsoap:body use="literal" />
</wsdl:input>
<wsdl:output>
<wsdlsoap:body use="literal" />
</wsdl:output>
<wsdl:fault name="fault">
<wsdlsoap:fault name="fault" use="literal" />
</wsdl:fault>
</wsdl:operation>
The stub got generated has the following code to add the headers
// add the children only if the parameter is not null
if (sessionId563!=null){
org.apache.axiom.om.OMElement omElementsessionId563 = toOM(sessionId563,
optimizeContent(new javax.xml.namespace.QName("xxxx", "myoperation")));
org.apache.axiom.soap.SOAPHeaderBlock soapHeaderBlocksessionId563 =
env.getHeader().addHeaderBlock(omElementsessionId563.getLocalName(),
omElementsessionId563.getNamespace());
soapHeaderBlocksessionId563.addChild(omElementsessionId563.getFirstElement
());
}
// add the children only if the
parameter is not null
if (security564!=null){
org.apache.axiom.om.OMElement omElementsecurity564 = toOM(security564,
optimizeContent(new javax.xml.namespace.QName("xxxx", "myoperation")));
org.apache.axiom.soap.SOAPHeaderBlock soapHeaderBlocksecurity564 =
env.getHeader().addHeaderBlock(omElementsecurity564.getLocalName(),
omElementsecurity564.getNamespace());
soapHeaderBlocksecurity564.addChild(omElementsecurity564.getFirstElement());
}
// add the children only if the
parameter is not null
if (source565!=null){
org.apache.axiom.om.OMElement omElementSource565 = toOM(Source565,
optimizeContent(new javax.xml.namespace.QName("xxxxx", "myoperation")));
org.apache.axiom.soap.SOAPHeaderBlock soapHeaderBlocksource565 =
env.getHeader().addHeaderBlock(omElementSource565.getLocalName(),
omElementSource565.getNamespace());
soapHeaderBlockSource565.addChild(omElementSource565.getFirstElement());
}
If u look at the bold stuff results in a null pointer, here i will explain
how
omElementsource565 = <source>31234234213<source>
soapHeaderBlocksource565 =<soap/>
omElementSource565.getFirstElement() = null;
soapHeaderBlockSource565.addChild(omElementSource565.getFirstElement());
throws a null pointer....
Is there something i am doing wrong is this a problem with the code
generation?
I am using axis2-1.3RC2, namespaces are omitted in the examle
Thanks in advance
--
Rgds
Mehar