JDOM Stream writer does not properly handle namespace on attributes of element
------------------------------------------------------------------------------

                 Key: XFIRE-828
                 URL: http://jira.codehaus.org/browse/XFIRE-828
             Project: XFire
          Issue Type: Bug
          Components: JAXB 2.0
    Affects Versions: 1.2.2
         Environment: Linux, Eclipse 3.2, xfire 1.2.2
            Reporter: Yogesh Chawla
         Assigned To: Dan Diephouse


I autogenerated an xfire client using the Eclipse plugin.  When I go to invoke 
my webservice, I get the following error:

Caused by: org.jdom.IllegalNameException: The name "" is not legal for JDOM/XML 
attribute namespaces: An attribute namespace without a prefix can only be the 
NO_NAMESPACE namespace.
at org.jdom.Attribute.setNamespace(Attribute.java:456)
at org.jdom.Attribute.<init>(Attribute.java:206)
at 
org.codehaus.xfire.util.stax.JDOMStreamWriter.writeAttribute(JDOMStreamWriter.java:124)

The app crashes because the 'namespace' attribute is "".  There are two methods 
for 'writeAttribute'.  One that accepts a prefix and one that does not:

public void writeAttribute(String prefix, String namespace, String local, 
String value)
        throws XMLStreamException
    {
        currentNode.setAttribute(new Attribute(local, value, 
Namespace.getNamespace(prefix, namespace)));
    }

    public void writeAttribute(String namespace, String local, String value)
        throws XMLStreamException
    {
        currentNode.setAttribute(new Attribute(local, value, 
Namespace.getNamespace(namespace)));
    }

Perhaps the XMLStreamWriterOutput.attribute is calling the wrong method.  The 
two attributes where the failure occurs
should use the default namespace for the element but do not.  

To test this, one can generated code from this WSDL:

https://wijis.wisconsin.gov/wsdl/PointerCountService.wsdl

The client can then instantiate a Message Tracking Info object and call the 
service like so:

    public static final void main(String args[])
    {
        PointerCountServiceClient myClient = new PointerCountServiceClient();
        
        PointerManagementInvocationType pointerCount = new 
PointerManagementInvocationType(); 
        
pointerCount.setSubmitterURI("http://wijis.wisconsin.gov/names/operators";);
        
         WijisMessageTrackingInfoType messageTrackingInfo = new 
WijisMessageTrackingInfoType();
         BigInteger convSequence = BigInteger.ZERO;
         BigInteger reqInvocationNumber = BigInteger.valueOf(10000);
         BigInteger serviceInvocationNumber = BigInteger.valueOf(1);
         
         messageTrackingInfo.setAdHocUserURI("http://[EMAIL 
PROTECTED]/names/directories/");
         
         
         messageTrackingInfo.setBranchStack("0");
         messageTrackingInfo.setConvSeq(convSequence);
         
         System.out.println(messageTrackingInfo.getBranchStack());
         
         
messageTrackingInfo.setCurrentSendingOperatorURI("http://wijis.wisconsin.gov/names/operators/";);
         
messageTrackingInfo.setCurrentServiceDefURI("http://wijis.wisconsin.gov/gateway/services/Pointer/request/countMyPointers/";);
         messageTrackingInfo.setCurrentServiceLabel("dont know");
         
messageTrackingInfo.setCurrentServiceProviderURI("http://wijis.wisconsin.gov/names/operators/";);
         messageTrackingInfo.setInitialUserURI("http://[EMAIL 
PROTECTED]/names/directories/");
         messageTrackingInfo.setRequesterInvocationNum(reqInvocationNumber);
         messageTrackingInfo.setServiceInvocationNum(serviceInvocationNumber);
         messageTrackingInfo.setServiceLabel("dont know");
         
messageTrackingInfo.setServiceDefURI("http://wijis.wisconsin.gov/gateway/services/Pointer/request/countMyPointers/";);
         
messageTrackingInfo.setServiceProviderURI("http://wijis.wisconsin.gov/names/operators/";);
         
messageTrackingInfo.setServiceRequesterURI("http://wijis.wisconsin.gov/names/operators/";);
         
         Holder<WijisMessageTrackingInfoType>  messageTrackingInfo2 = new 
Holder();
         
        try {
                PointerCountResponseType response = 
myClient.getPointerCountServiceSOAP("http://localhost:8080/xfire/PointerCount";).pointerCount(pointerCount,
 messageTrackingInfo, messageTrackingInfo2);
                System.out.println(response.getRecordCount());
        } catch (PointerCountError e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
}

After this the error will occur on the attributes: convSeq and branchStack.  
Both of these attributes use the default namespace of the element 
messageTrackingInfo.  The default namespace is:  
http://wijis.wisconsin.gov/specs/schemas/message/v1.0/2006-05-25/


-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe from this list please visit:

    http://xircles.codehaus.org/manage_email

Reply via email to