Problem:
I want to use jaxb to generate a xsl file from xsd file.
The xsd file contains, in addition to the default namespace (DEFAULT_NAMESPACE), another namespace (MY_NAMESPACE) which is not used in xsd but it will be used in the xsl.
The generator does not copy MY_NAMESPACE, so the xsl file is no longer valid.
Solution:
One proposed solution is to use NamespacePrefixMapper
Xsd example:
when I use jaxb to generate xsl, I do not get the namespace xmlns:s="http://www.w3.org/2000/sss". Which is util for xsl.
So the usefulness of this article
I want to use jaxb to generate a xsl file from xsd file.
The xsd file contains, in addition to the default namespace (DEFAULT_NAMESPACE), another namespace (MY_NAMESPACE) which is not used in xsd but it will be used in the xsl.
The generator does not copy MY_NAMESPACE, so the xsl file is no longer valid.
Solution:
One proposed solution is to use NamespacePrefixMapper
final Marshaller marshaller = JAXBContext.newInstance(MyObjectFactory.class)
.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.setProperty("com.sun.xml.bind.namespacePrefixMapper",
new NamespacePrefixMapper() {
@Override
public String[] getPreDeclaredNamespaceUris() {
return new String[] { MY_NAMESPACE };
}
@Override
public String getPreferredPrefix(final String namespaceUri,
final String suggestion, final boolean requirePrefix) {
if (namespaceUri.equals(MY_NAMESPACE)) {
return MY_NAMESPACE_PREFIX;
}
return suggestion;
}
});
Xsd example:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3.org/1999/XSL/Transform"
xmlns:tns="http://www.w3.org/1999/XSL/Transform"
elementFormDefault="qualified"
xmlns:s="http://www.w3.org/2000/sss">
<xs:element name="stylesheet" type="tns:Stylesheet"></xs:element>
<xs:complexType name="Stylesheet">
<xs:attribute name="name" type="xs:string"></xs:attribute>
<xs:attribute name="select" type="xs:string"></xs:attribute>
</xs:complexType> </xs:schema>
when I use jaxb to generate xsl, I do not get the namespace xmlns:s="http://www.w3.org/2000/sss". Which is util for xsl.
So the usefulness of this article
Thanks for this post, it's so interesting
ReplyDelete