  | | | MessageContext question | MessageContext question 2006-05-12 - By Ken Campbell
Back Hi,
If someone understands the AxisEngine well I'd appreciate them having a look at this problem:
I'm having a data binding error which I don't understand. In an attempt to trace it I've called:
System.out.println(msgContext.getEnvelope());
in MyMessageReceiverInOut.invokeBusinessLogic()
This seems to have a very weird effect. By placing it here :
.
if("login".equals(methodName)){
uk.co.edp.ws.paf.LoginResponseDocument param11 = null;
System.out.println(msgContext.getEnvelope());
//doc style
param11 =skel.login(
(uk.co.edp.ws.paf.LoginRequestDocument)fromOM(
msgContext.getEnvelope().getBody().getFirstElement(),
uk.co.edp.ws.paf.LoginRequestDocument.class,
getEnvelopeNamespaces(msgContext.getEnvelope())));
envelope = toEnvelope(getSOAPFactory(msgContext), param11, false);
System.out.println("toEnvelope() returned.");
.
the service classes will return a valid param11, but axis throws an exception:
- Servlet.service() for servlet AxisServlet threw exception
java.lang.NullPointerException 
at com.ctc.wstx.util.BijectiveNsMap.findPrefixByUri(BijectiveNsMap.java:132)
at com.ctc.wstx.sw.SimpleOutputElement.getPrefix(SimpleOutputElement.java:453)
at org.apache.axiom.om.impl.serialize.StreamingOMSerializer.serializeAttributes (StreamingOMSerializer.java:214)
at org.apache.axiom.om.impl.serialize.StreamingOMSerializer.serializeElement(St reamingOMSerializer.java:147)
at org.apache.axiom.om.impl.serialize.StreamingOMSerializer.serializeNode(Strea mingOMSerializer.java:73)
at org.apache.axiom.om.impl.serialize.StreamingOMSerializer.serialize(Streaming OMSerializer.java:56)
at org.apache.axiom.om.impl.util.OMSerializerUtil.serializeByPullStream(OMSeria lizerUtil.java:315)
at org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl. java:786)
at org.apache.axiom.om.impl.llom.OMElementImpl.internalSerializeAndConsume(OMEl ementImpl.java:809)
at org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl. java:780)
at org.apache.axiom.soap.impl.llom.SOAPEnvelopeImpl.internalSerialize(SOAPEnvel opeImpl.java:171)
at org.apache.axiom.om.impl.llom.OMElementImpl.internalSerializeAndConsume(OMEl ementImpl.java:809)
at org.apache.axiom.om.impl.llom.OMNodeImpl.serializeAndConsume(OMNodeImpl.java :381)
at org.apache.axis2.transport.http.CommonsHTTPTransportSender.sendUsingOutputSt ream(CommonsHTTPTransportSender.java:256)
at org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke(CommonsHTT PTransportSender.java:210)
at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:589)
at org.apache.axis2.receivers.AbstractInOutSyncMessageReceiver.receive(Abstract InOutSyncMessageReceiver.java:43)
at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:454)...
- Servlet.service() for servlet jsp threw exception
java.lang.IllegalStateException : getOutputStream() has already been called for this response..
So my question is, it seems as if MessageContext.getEnvelope() in some way 'consumes' the data stream. How is it possible
that I am getting a response from my service classes when I do this and that no other class complains about my intercepting msgContext until
BijectiveNsMap ? The data binding error is normally thrown in MyMessageReceiverInOut.fromOM() at the request but when I call msgContext.getEnvelope()
it happily goes off and gets a proper response!
Regards,
Ken
<html>
<head> <meta http-equiv=Content-Type content="text/html; charset=us-ascii"> <meta name=Generator content="Microsoft Word 11 (filtered)"> <style> <!-- /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {margin:0cm; margin-bottom:.0001pt; font-size:12.0pt; font-family:"Times New Roman";} a:link, span.MsoHyperlink {color:blue; text-decoration:underline;} a:visited, span.MsoHyperlinkFollowed {color:purple; text-decoration:underline;} span.EmailStyle17 {font-family:Arial; color:windowtext;} @(protected) Section1 {size:612.0pt 792.0pt; margin:72.0pt 90.0pt 72.0pt 90.0pt;} div.Section1 {page:Section1;} --> </style>
</head>
<body lang=EN-US link=blue vlink=purple>
<div class=Section1>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'>Hi,</span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'> </span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'>If someone understands the AxisEngine well I’d appreciate them having a look at this problem:</span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'> </span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'>I’m having a data binding error which I don& #8217;t understand. In an attempt to trace it I’ve called:</span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'>System.out.println(msgContext.getEnvelope());</span>< /font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'>in MyMessageReceiverInOut.invokeBusinessLogic()</span ></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'> </span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'>This seems to have a very weird effect. By placing it here :</span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'> </span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'>…</span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'>if("login".equals(methodName)){</span>< /font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'> </span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'> </span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'>   ; uk.co.edp.ws.paf.LoginResponseDocument param11 = null;</span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'>   ; <b><span style='font-weight:bold'>System.out.println(msgContext.getEnvelope()); </span></b></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'>   ; </span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'>   ; //doc style</span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'>   ; param11 =skel.login(</span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'>   ; (uk.co.edp.ws.paf.LoginRequestDocument)fromOM(</span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'>   ; msgContext.getEnvelope().getBody().getFirstElement(),</span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'>   ; uk.co.edp.ws.paf.LoginRequestDocument.class,</span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'>   ; getEnvelopeNamespaces(msgContext.getEnvelope())));</span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'>   ; </span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'>   ; envelope = toEnvelope(getSOAPFactory(msgContext), param11, false);</span> </font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'>   ; System.out.println("toEnvelope() returned.");</span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'>…</span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'> </span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'> </span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'>the service classes will return a valid param11, but axis throws an exception:</span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'> </span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'>- Servlet.service() for servlet AxisServlet threw exception</span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'>java.lang.NullPointerException </span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'>   ; at com.ctc.wstx.util.BijectiveNsMap.findPrefixByUri(BijectiveNsMap.java:132)</span ></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'>   ; at com.ctc.wstx.sw.SimpleOutputElement.getPrefix(SimpleOutputElement.java:453)< /span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'>   ; at org.apache.axiom.om.impl.serialize.StreamingOMSerializer.serializeAttributes (StreamingOMSerializer.java:214)</span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'>   ; at org.apache.axiom.om.impl.serialize.StreamingOMSerializer.serializeElement (StreamingOMSerializer.java:147)</span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'>   ; at org.apache.axiom.om.impl.serialize.StreamingOMSerializer.serializeNode (StreamingOMSerializer.java:73)</span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'>   ; at org.apache.axiom.om.impl.serialize.StreamingOMSerializer.serialize (StreamingOMSerializer.java:56)</span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'>   ; at org.apache.axiom.om.impl.util.OMSerializerUtil.serializeByPullStream (OMSerializerUtil.java:315)</span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'>   ; at org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl .java:786)</span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'>   ; at org.apache.axiom.om.impl.llom.OMElementImpl.internalSerializeAndConsume (OMElementImpl.java:809)</span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'>   ; at org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl .java:780)</span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'>   ; at org.apache.axiom.soap.impl.llom.SOAPEnvelopeImpl.internalSerialize (SOAPEnvelopeImpl.java:171)</span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'>   ; at org.apache.axiom.om.impl.llom.OMElementImpl.internalSerializeAndConsume (OMElementImpl.java:809)</span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'>   ; at org.apache.axiom.om.impl.llom.OMNodeImpl.serializeAndConsume(OMNodeImpl.java :381)</span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'>   ; at org.apache.axis2.transport.http.CommonsHTTPTransportSender .sendUsingOutputStream(CommonsHTTPTransportSender.java:256)</span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'>   ; at org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke (CommonsHTTPTransportSender.java:210)</span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'>   ; at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:589)</span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'>   ; at org.apache.axis2.receivers.AbstractInOutSyncMessageReceiver.receive (AbstractInOutSyncMessageReceiver.java:43)</span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'>   ; at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:454)…..</span> </font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'>- Servlet.service() for servlet jsp threw exception< /span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'>java.lang.IllegalStateException : getOutputStream() has already been called for this response….</span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'> </span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'>So my question is, it seems as if MessageContext.getEnvelope() in some way ‘consumes’ the data stream. How is it possible</span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'>that I am getting a response from my service classes when I do this and that no other class complains about my intercepting msgContext until</span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'>BijectiveNsMap ? The data binding error is normally thrown in MyMessageReceiverInOut.fromOM() at the <b><span style='font-weight: bold'>request</span></b> but when I call msgContext.getEnvelope()</span></font> </p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'>it happily goes off and gets a proper response!</span ></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'> </span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'>Regards,</span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'>Ken</span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span lang=EN-GB style='font-size: 10.0pt;font-family:Arial'> </span></font></p>
</div>
</body>
</html>
|
|
 |