[ https://issues.apache.org/jira/browse/CXF-2519?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Daniel Kulp resolved CXF-2519. ------------------------------ Resolution: Not A Problem Fix Version/s: Invalid Marking this as "Not a problem". CXF, by default, doesn't use the default namespace so normally would not be exposed to this bug in JAXB. In anycase, it IS a JAXB issue and not really much we can do about it. > Incorrect handling of qualified attributes and default namespace when > marshalling > --------------------------------------------------------------------------------- > > Key: CXF-2519 > URL: https://issues.apache.org/jira/browse/CXF-2519 > Project: CXF > Issue Type: Bug > Components: JAXB Databinding > Affects Versions: 2.2.4 > Environment: Windows Vista > Reporter: Yaytay > Fix For: Invalid > > > This is part of my schema (the whole thing is quite complex and inline > in a WSDL document): > <xsd:schema targetNamespace="http://yaytay" xmlns:tns="http://yaytay" > attributeFormDefault="qualified" > elementFormDefault="qualified"> > <xsd:element name="ScheduledEmailQueryRequest" > type="tns:ScheduledEmailQueryRequestType"></xsd:element> > <xsd:element name="ScheduledEmailQueryResponse" > type="tns:ScheduledEmailQueryResponseType"></xsd:element> > ... > <xsd:complexType name="ScheduledEmailQueryResponseType"> > <xsd:sequence> > <xsd:element name="Message" > type="tns:EmailMessageDefinition" maxOccurs="unbounded" > minOccurs="0"></xsd:element> > </xsd:sequence> > </xsd:complexType> > <xsd:complexType name="EmailMessageDefinition"> > <xsd:sequence> > <xsd:element name="To" minOccurs="0" > type="tns:EmailRecipient" maxOccurs="unbounded"></xsd:element> > <xsd:element name="From" > type="tns:EmailAddress"></xsd:element> > <xsd:element name="Subject" > type="xsd:normalizedString"></xsd:element> > ... > </xsd:sequence> > <xsd:attribute name="ID" type="xsd:string" use="required"/> > </xsd:complexType> > The noticeable thing is that the EmailMessageDefinition element has an > attribute called ID and that it should be namespace qualified > (attributeFormDefault="qualified" ). > Using CXF as a SOAP processor works correctly for everything I've tried with > it so far, my problem comes when I try to marshall an EmailMessageDefinition > manually: > EmailMessageDefinition defn = createMessageDefinition( "id", > "payload" ); // returns an EmailMessageDefinition with the id set to "id" > and some standard recipients > try > { > JAXBDataBinding binding = new JAXBDataBinding(); > JAXBContext jc = JAXBContext.newInstance( > "yaytay.emailschedulertarget" ); > Marshaller marshaller = jc.createMarshaller(); > StringWriter writer = new StringWriter(); > marshaller.marshal( new JAXBElement( new QName( "http://yaytay", > "EmailMessageDefinition" ), > > EmailMessageDefinition.class, > defn ), > writer ); > System.out.println( writer.toString() ); > That gives: > <?xml version="1.0" encoding="UTF-8" > standalone="yes"?><ns1:EmailMessageDefinition ns1:ID="id" > xmlns:ns1="http://yaytay">...</ns1:EmailMessageDefinition> > Which is correct, but the namespace is repeated all over the place and is > ugly. > So I try to make it the default namespace by adding: > private class NamespaceMapper extends NamespacePrefixMapper > { > @Override > public String getPreferredPrefix( String namespaceUri, String > suggestion, boolean requirePrefix ) > { > if( "http://yaytay".equals( namespaceUri ) ) > { > return ""; > } > else > { > return suggestion; > } > } > } > And this is the result: > <?xml version="1.0" encoding="UTF-8" > standalone="yes"?><EmailMessageDefinition ID="id" > xmlns="http://yaytay">...</EmailMessageDefinition> > That result is wrong, according to the schema, because the attribute is not > affected by the default namespace. > This can be demonstrated by unmarshalling the result, which fails to set the > ID on the resulting object. > I tried adding: > @Override > public String[] getPreDeclaredNamespaceUris2() > { > String[] result = { "ns", "http://yaytay" }; > return result; > } > but that didn't help: > <?xml version="1.0" encoding="UTF-8" > standalone="yes"?><ns:EmailMessageDefinition ID="id" xmlns="http://yaytay" > xmlns:ns="http://yaytay">...</ns:EmailMessageDefinition> > I think the marshaller needs special handling for qualified attributes > with an enforced default namespace. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.