Hi,

I have this class generated by wsdl2java (comments remove):
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "RunExtensionArgumentsType", propOrder = {
    "extensionArgument"
})
public class RunExtensionArgumentsType
    implements Serializable
{

    @XmlElement(name = "ExtensionArgument")
    protected List<RunExtensionType> extensionArgument;

    public List<RunExtensionType> getExtensionArgument() {
        if (extensionArgument == null) {
            extensionArgument = new ArrayList<RunExtensionType>();
        }
        return this.extensionArgument;
    }

}


I have been serialising it for ages using the following code:
    static {
        aegisContext.initialize();

        TypeMapping tm = aegisContext.getTypeMapping();
        Type aegisType = tm.getType( RunExtensionArgumentsType.class );
        if( aegisType == null )
        {
            // Make a new type and register it for the future.
            log.debug( "Registering type for RunExtensionArgumentsType" );
            TypeCreator tc = tm.getTypeCreator();
            aegisType = tc.createType( RunExtensionArgumentsType.class );

QName qName = new QName( "http://groupgti.com/s-service";, "RunExtensionType"); tm.register( RunExtensionArgumentsType.class, qName, aegisType );
        }
    }

public static String extensionArgsToString( RunExtensionArgumentsType extensionArgs )
    {
        try
        {
            StringWriter stringWriter = new StringWriter();
XMLStreamWriter xmlWriter = xmlOutputFactory.createXMLStreamWriter( stringWriter );

AegisWriter<XMLStreamWriter> writer = aegisContext.createXMLStreamWriter();

            TypeMapping tm = aegisContext.getTypeMapping();
            Type aegisType = tm.getType( RunExtensionArgumentsType.class );
writer.write( extensionArgs, aegisType.getSchemaType(), true, xmlWriter, aegisType );

            xmlWriter.close();
            return stringWriter.toString();
        }
        catch( Exception ex )
        {
log.error( ExceptionStringConverter.ExceptionWithCauses( ex ) );
            return null;
        }
    }

Now I come to deserialize it using this:
public static RunExtensionArgumentsType extensionArgsFromString( String extensionArgsString )
    {
        try
        {
StringReader stringReader = new StringReader( extensionArgsString ); XMLStreamReader xmlReader = xmlInputFactory.createXMLStreamReader( stringReader );

AegisReader<XMLStreamReader> reader = aegisContext.createXMLStreamReader();

            TypeMapping tm = aegisContext.getTypeMapping();
            Type aegisType = tm.getType( RunExtensionArgumentsType.class );
            Object result = reader.read( xmlReader, aegisType );

            xmlReader.close();
            return (RunExtensionArgumentsType)result;
        }
        catch( Exception ex )
        {
            StringBuilder msg = new StringBuilder();
msg.append( "Exception whilst trying to convert \" ").append( extensionArgsString ).append( "\" to RunExtensionArgumentsType:\n\t" ); log.error( ExceptionStringConverter.ExceptionWithCauses( msg, ex ) );
            return null;
        }
    }

but it hits this exception:
        org.apache.cxf.aegis.DatabindingException:
No write method for property {http://groupgti.com/s-service}extensionArgument in class com.groupgti.s_service.RunExtensionArgumentsType: No write method for property {http://groupgti.com/s-service}extensionArgument in class com.groupgti.s_service.RunExtensionArgumentsType:
 org.apache.cxf.aegis.type.basic.BeanType:writeProperty @ BeanType.java:272
 org.apache.cxf.aegis.type.basic.BeanType:readObject @ BeanType.java:163
org.apache.cxf.aegis.AegisXMLStreamDataReader:read @ AegisXMLStreamDataReader.java:82 org.apache.cxf.aegis.AegisXMLStreamDataReader:read @ AegisXMLStreamDataReader.java:31
 com.groupgti.services.service.XmlConversionSupport:extensionArgsFromString @ 
XmlConversionSupport.java:162
com.groupgti.services.XmlConversionsTest:testStringToExtensionArgs @ XmlConversionsTest.java:65


Now clearly this class can be deserialized 'cos it's used in by the web service, so what do I have to do to make it use a get().add() instead of a set() for collections?

Thanks

Jim

Reply via email to