"Unbound namespace URI" Exception while serializing ADBBean -----------------------------------------------------------
Key: AXIS2-3798 URL: https://issues.apache.org/jira/browse/AXIS2-3798 Project: Axis 2.0 (Axis2) Issue Type: Bug Components: codegen Affects Versions: 1.3, 1.4 Environment: Axis2 1.3/1.4, Tomcat 5.5.26 Reporter: Detelin Yordanov I have a simple POJO service with the following method: package org.tempuri.test; import org.tempuri.test.data.arrays.ArrayOfstring; public class TypeTest { public ArrayOfstring retArrayOfstring(ArrayOfstring inString) { return inString; } } The ArrayOfstringis declared like this: package org.tempuri.test.data.arrays; public class ArrayOfstring { protected String[] string; public String[] getString() { if (string == null) { string = new String[0]; } return this.string; } public void setString(String[] string) { this.string = string; } } I deploy this POJO on an Axis2 1.3/1.4 (both have the issue) runtime running on Tomcat. Then I generate a client stub using the following command: wsdl2java -ap -o ./generated -s -u -uw -uri http://localhost:8080/axis2-1.4/services/TypeTest?wsdl I use the stub to invoke the service passing an array of strings that contains a null element (this is important since without it I do not get the exception): ArrayOfstring input = new ArrayOfstring(); input.setString(new String[]{"Abracadabra", null, "abc"}); stub.retArrayOfstring(input); While serializing the ArrayOfstring ADBBean I get an "Unbound namespace URI 'http://arrays.data.test.tempuri.org/xsd'" exception: Caused by: javax.xml.stream.XMLStreamException: Unbound namespace URI 'http://arrays.data.test.tempuri.org/xsd' at com.ctc.wstx.sw.SimpleNsStreamWriter.writeStartOrEmpty(SimpleNsStreamWriter.java:239) at com.ctc.wstx.sw.BaseNsStreamWriter.writeStartElement(BaseNsStreamWriter.java:312) at org.apache.axiom.om.impl.MTOMXMLStreamWriter.writeStartElement(MTOMXMLStreamWriter.java:105) at org.apache.axis2.databinding.utils.writer.MTOMAwareXMLSerializer.writeStartElement(MTOMAwareXMLSerializer.java:47) at org.tempuri.test.data.arrays.xsd.ArrayOfstring.serialize(ArrayOfstring.java:230) at org.tempuri.test.data.arrays.xsd.ArrayOfstring.serialize(ArrayOfstring.java:160) at org.tempuri.test.RetArrayOfstring.serialize(RetArrayOfstring.java:203) at org.tempuri.test.RetArrayOfstring.serialize(RetArrayOfstring.java:123) at org.tempuri.test.RetArrayOfstring$1.serialize(RetArrayOfstring.java:111) ... As far as I could investigate this, the problem seems to be that the first non-null element uses the "prefix2" variable when registering the namespace leavin "prefix" uninitialized, the null element that follows uses just "prefix" generating a new value for it and setting it on the current element. The third non-null string element checks whether "prefix" is not null and since it is not (because it has been initialized by the null element handling), assumes that the prefix and its namespace have already been registered on this element while they have not been. This is just an assumption, I might be wrong about it, however I found out that this is fixed easily by manually adding the following line: in the serialize(..) method: ... for (int i = 0;i < localString.length;i++){ if (localString[i] != null){ if (!emptyNamespace) { prefix = xmlWriter.getPrefix(namespace); //MANUALLY ADDED LINE if (prefix == null) { ... -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]