Here is the source code of OMStAXWrapper:
http://tinyurl.com/33k5m7
Here are some things I noticed:
1.) The NPE occurs at generateEvents on line 1115 because the passed-in
"node" parameter is null.
2.) Method next(), which calls generateEvents() at line 911, does not
check to see if the currentNode parameter is null. So apparently we
have a case where the state is NAVIGABLE but currentNode is null. (This
I believe is OK, because client code should call hasNext() before
calling next().)
3.) Your code calls method hasNext() at line 797 before calling next().
But you can see the AXIOM implementation of hasNext() has a different
business logic depending on the boolean value of
"needToThrowEndDocument".
So my guess would be that the needToThrowEndDocument value is different
between standalone usage and web service usage, which changes the
business logic of hasNext(). Further, the business logic for standalone
is correct but not working properly under certain circumstances for web
service usage (i.e., it returns true when it should be false, causing
your code to call next() erroneously, causing the NPE.)
Glen
Am Freitag, den 04.05.2007, 11:36 +0800 schrieb Xinjun Chen:
> I have tried to invoke the EPaymentHandler from JSP directly, it works
> fine. The EPaymentHandler.execute() invokes
> CreditCardPaymentRequestBinder.toObject.
>
> But when I invoke the EPaymentHandler from inside a child class of
> org.apache.axis2.receivers.RawXMLINOutMessageReceiver, then I get the
> NPE.
> The child class of RawXMLINOutMessageReceiver override the
> invokeBusinessLogic method as follows:
>
> public void invokeBusinessLogic(MessageContext msgContext,
> MessageContext newmsgContext) throws AxisFault {
>
> log.debug("EPaymentHandler invoked.");
> try {
> epayHandler.execute (msgContext, newmsgContext);
> // epayHandler will invoke CreditCardPaymentRequestBinder.
> } catch (Exception e) {
> log.error(e);
> throw new AxisFault(e);
> }
> }
>
> As can be seen, this method does not contain any code dealing with
> StAX parser.
> I am wondering which step affects the StAX parser and cause the
> org.apache.axiom.om.impl.llom.OMStAXWrapper.generateEvents(OMStAXWrapper.java:1115)
> NPE.
> I am not familiar with the implementation of AXIOM, and now cannot
> proceed.
>
> As far as I know, wstx-asl-3.2.0.jar is the implementation of
> stax-api. How about the axiom-impl-1.2.2.jar? Does it use
> wstx-asl-3.2.0?
>
> Regards,
> Xinjun
>
>
> On 5/4/07, Xinjun Chen <[EMAIL PROTECTED]> wrote:
> Hi Dims,
>
> The same soap request works with my standalone program. The
> same method toObject runs correctly gives correct result.
>
> Regards,
> Xinjun
>
> On 5/3/07, Davanum Srinivas <[EMAIL PROTECTED] > wrote:
> Xinjun,
>
> can you run tcpmon to capture the soap request and use
> that xml with
> your stand alone program to see if that works?
>
> -- dims
>
> On 5/3/07, Xinjun Chen <[EMAIL PROTECTED]> wrote:
> >
> >
> > Hi,
> >
> > I wrote a sample custom serializer/deserializer to
> serialize an object. When
> > I use a standalone program to test the serializer,
> it works fine. But when I
> > deploy the serializer as part of a web service and
> and invoke the web
> > service through a SOAP request, I got the following
> null pointer execption.
> > I googled but didn't find the reason of this. Why
> does the NPE occur only
> > when I deploy the binder as part of the web service?
> I used the same
> > SOAPEnvelope to test.
> >
> >
> >
> > java.lang.NullPointerException
> > at
> >
>
> org.apache.axiom.om.impl.llom.OMStAXWrapper.generateEvents(OMStAXWrap
> > per.java:1115)
> > at
> > org.apache.axiom.om.impl.llom.OMStAXWrapper.next
> (OMStAXWrapper.java:9
> > 11)
> > at
> >
>
> com.mycom.CreditCardPaymentRequestBinder.toObject(CreditCardPaymentRequestBinder.java:138)
> >
> >
> >
> > The toObject method definition is as follows:
> >
> > public CreditCardPaymentRequest toObject(QName
> qname, XMLStreamReader
> > reader) throws XMLStreamException {
> > CreditCardPaymentRequest obj = new
> CreditCardPaymentRequest();
> >
> > String rootElementName = qname.getLocalPart ();
> > String uri = qname.getNamespaceURI();
> >
> > if(!rootNsUri.equals(uri)) {
> > throw new XMLStreamException("Invalid namespace "
> + uri + ". Expected
> > namespace uri is " + rootNsUri);
> > }
> >
> > while(reader.hasNext()) {
> > int type = reader.next(); // Line number: 138
> >
> > if(XMLStreamConstants.START_ELEMENT == type){
> > String element = reader.getLocalName ();
> >
> > if( rootLocalName.equals(element) ) {
> > continue;
> > } else if( element.equals("cardNumber") ){
> > obj.setCardNumber (reader.getElementText());
> > } else if( element.equals("expiryMonth") ) {
> > obj.setExpiryMonth(reader.getElementText());
> > } else if( element.equals("expiryYear") ) {
> > obj.setExpiryYear(reader.getElementText());
> > } else if( element.equals("brand") ) {
> > obj.setBrand(reader.getElementText());
> > } else if( element.equals("totalAmount") ) {
> > obj.setTotalAmount(reader.getElementText ());
> > } else if( element.equals("currency") ) {
> > obj.setCurrency(reader.getElementText());
> > } else if( element.equals("systemId") ) {
> > obj.setSystemId(reader.getElementText ());
> > } else if( element.equals("referenceNumber") ) {
> > obj.setReferenceNumber(reader.getElementText());
> > } else if( element.equals ("op") ) {
> > obj.setOp(reader.getElementText ());
> > } else {
> > throw new RuntimeException("Unexpected element
> " + element);
> > }
> > }
> >
> > if( XMLStreamConstants.END_ELEMENT == type){
> > if(reader.getLocalName
> ().equals(rootElementName)){
> > break;
> > }
> > }
> >
> > }
> >
> > return obj;
> > }
> >
> >
> >
> >
> >
> > Regards,
> >
> > Xinjun
>
>
> --
> Davanum Srinivas :: http://davanum.wordpress.com
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail:
> [EMAIL PROTECTED]
> For additional commands, e-mail:
> [EMAIL PROTECTED]
>
>
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]