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

Reply via email to