You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by "Detelin Yordanov (JIRA)" <ji...@apache.org> on 2008/05/14 11:37:55 UTC

[jira] Created: (AXIS2-3798) "Unbound namespace URI" Exception while serializing ADBBean

"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: axis-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-dev-help@ws.apache.org


[jira] Updated: (AXIS2-3798) "Unbound namespace URI" Exception while serializing ADBBean

Posted by "Detelin Yordanov (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/AXIS2-3798?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Detelin Yordanov updated AXIS2-3798:
------------------------------------

    Attachment: ArrayOfstring.java

> "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.4, 1.3
>         Environment: Axis2 1.3/1.4, Tomcat 5.5.26
>            Reporter: Detelin Yordanov
>         Attachments: ArrayOfstring.java, full stacktrace.txt, TypeTest.aar, TypeTestClient.java
>
>
> 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: axis-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-dev-help@ws.apache.org


[jira] Updated: (AXIS2-3798) "Unbound namespace URI" Exception while serializing ADBBean

Posted by "Detelin Yordanov (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/AXIS2-3798?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Detelin Yordanov updated AXIS2-3798:
------------------------------------

    Attachment: full stacktrace.txt
                TypeTestClient.java
                TypeTest.aar

The aar contains also the sources of the service.

> "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.4, 1.3
>         Environment: Axis2 1.3/1.4, Tomcat 5.5.26
>            Reporter: Detelin Yordanov
>         Attachments: full stacktrace.txt, TypeTest.aar, TypeTestClient.java
>
>
> 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: axis-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-dev-help@ws.apache.org


[jira] Resolved: (AXIS2-3798) "Unbound namespace URI" Exception while serializing ADBBean

Posted by "Amila Chinthaka Suriarachchi (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/AXIS2-3798?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Amila Chinthaka Suriarachchi resolved AXIS2-3798.
-------------------------------------------------

    Resolution: Fixed

use a local variable to keep the prefix for nill case as well.

> "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.4, 1.3
>         Environment: Axis2 1.3/1.4, Tomcat 5.5.26
>            Reporter: Detelin Yordanov
>         Attachments: ArrayOfstring.java, full stacktrace.txt, TypeTest.aar, TypeTestClient.java
>
>
> 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.