You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-user@axis.apache.org by Heitzso <he...@bellsouth.net> on 2002/06/04 18:24:18 UTC

href, mozilla soap, and custom serializers

HELP! Ouch.  HELP HELP  (please ... and thanks ...)

Mozilla 1.0rc3 SOAP doesn't handle hrefs. I recoded a java 
bean (returned from web service)
to only contain simple data types and arrays of simple
data types but axis still uses a href even though 
nothing is gained by it.

I'm trying _hard_ to code a custom serializer for my
bean to avoid the href but my serializer/axis setup
breaks with a null pointer exceptions.  I'm following
all of the doc and the encoder sample app, but it's
still a nogo.  null pointer coming out of (beta2):
	ServiceDesc.java 688 (647, 628, 507, 488).
Line 688 in ServiceDesc.java is:
 operation.setReturnType(tm.getTypeQName(method.getReturnType()));

My wsdd element that's triggering the null pointer:
<typeMapping xmlns:ns="urn:ferrett" qname="ns:SelectionNodeSet"
type="java:org.thedataweb.service.ferrett.datamodel.SelectionNodeSet"
serializer="org.thedataweb.service.ferrett.datamodel.SelectionNodeSetSerializerFactory"
deserializer="org.thedataweb.service.ferrett.datamodel.SelectionNodeSetDeserializerFactory"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
/>

Null pointer trigger occurs when I go to AxisServlet to just list the 
exposed classes/methods.

My ser/deser factories follow the sample code exactly.  

The ser code:

public class SelectionNodeSetSerializer implements Serializer {
	
 public static final String LENGTH = "length";
 public static final String NAMES = "names";
 public static final String IDS = "ids";
 public static final String DESCRIPTIONS = "descriptions";
 public static final String TERMINALS = "terminals";
 public static final QName myTypeQName = new QName("urn:ferrett",
"SelectionNodeSet");
 public SelectionNodeSetSerializer() {}
 public void serialize(QName name, Attributes attributes, Object value,
SerializationContext context) throws IOException {
   if (! (value instanceof SelectionNodeSet)) {
      throw new IOException(.....);
   }
   SelectionNodeSet selectionNodeSet = (SelectionNodeSet) value;
   context.startElement(name, attributes);
   context.serialize(new QName("urn:ferrett", LENGTH), null, new
Integer(selectionNodeSet.length), Integer.class);
   //ArraySerializer arraySerializer = new ArraySerializer();
   //arraySerializer.serialize(new QName("", IDS), null, 
selectionNodeSet.ids, context);
   //arraySerializer.serialize(new QName("", NAMES), null,
selectionNodeSet.names, context);
   //arraySerializer.serialize(new QName("", DESCRIPTIONS), null,
selectionNodeSet.descriptions, context);
   //arraySerializer.serialize(new QName("", TERMINALS), null,
selectionNodeSet.terminals, context);
   context.endElement();
 }
	
 public String getMechanismType() { 
  return Constants.AXIS_SAX; 
 }
	
 public boolean writeSchema(Types types) throws Exception {
  return false;
 }


=========

Note that I've commented out the array serializers while I sort
out the simplest piece -- serializing a single integer.

THANKS
Heitzso