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