[ 
https://issues.apache.org/jira/browse/SIS-74?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Martin Desruisseaux closed SIS-74.
----------------------------------

> Avoid the com.sun.xml.bind.NamespacePrefixMapper mock class
> -----------------------------------------------------------
>
>                 Key: SIS-74
>                 URL: https://issues.apache.org/jira/browse/SIS-74
>             Project: Spatial Information Systems
>          Issue Type: Task
>          Components: Utilities
>    Affects Versions: 0.3, 0.4, 0.5
>         Environment: JDK6 and JDK7 (both may need a different approach)
>            Reporter: Martin Desruisseaux
>            Assignee: Martin Desruisseaux
>              Labels: JAXB
>             Fix For: 0.6
>
>
> h2. The problem
> The SIS {{MarshallerPool}} class uses the {{NamespacePrefixMapper}} class 
> from the {{com.sun.xml.internal.bind}} package. We are obviously not supposed 
> to use this internal class, but research on Internet 3 years ago suggested 
> that they were no way (at least at that time) to specify the root namespace 
> (the namespace that do not need prefix) and to customize the prefixes. Worst, 
> this internal feature was 
> [advertised|http://java.sun.com/webservices/docs/1.5/jaxb/vendorProperties.html]
>  as customizable by the following properties:
> * {{com.sun.xml.internal.bind.NamespacePrefixMapper}} (bundled JAXB)
> * {{com.sun.xml.bind.NamespacePrefixMapper}} (endorsed JAXB)
> Furthermore the {{NamespacePrefixMapper}} javadoc said: "_Implemented by the 
> user application to determine URI -> prefix mapping_".
> As an alternative, research on Internet suggests that the 
> {{javax.xml.bind.annotation.XmlSchema}} annotation works as expected in JDK7, 
> but JDK6 users have to use the endorsed JAXB version 2.2.4 or above. Bundled 
> versions are:
> * Java 1.6.0_37 is bundled with JAXB 2.1.10, so {{@XmlSchema}} doesn't seem 
> to work on that platform.
> * Java 1.7.0_15 is bundled with JAXB 2.2.4-2, so {{@XmlSchema}} would work on 
> that platform but we still have to check if it really works for us.
> Note that the {{NamespacePrefixMapper}} approach is still advertised even in 
> the [JAXB 2.2.6 
> documentation|http://jaxb.java.net/nonav/2.2.6/docs/ch03.html#marshalling-changing-prefixes].
> h2. Using {{NamespacePrefixMapper}}
> If the {{@XmlSchema}} annotations do not work, or if we want to be compatible 
> with the JAXB version bundled in JDK6, then we may have to keep the 
> {{NamespacePrefixMapper}} hack. Problem is that the {{javac}} compiler 
> normally blocks attempts to use this {{com.sun.xml.internal}} class. A 
> workaround found on Internet (not yet tested) is to use the following 
> compiler option:
> {noformat}
> -XDignore.symbol.file
> {noformat}
> If the above does not work, an alternative is to put {{rt.jar}} on the 
> classpath as a Maven dependency using {{<scope>system</scope>}}. But this 
> work only for Oracle JDK.
> An other alternative is to put a 
> {{com.sun.xml.internal.bind.NamespacePrefixMapper}} class with only the 
> method signature in the {{sis-utility}} module, and exclude that class from 
> the JAR file. The {{maven-jar-plugin}} [provides an exclusion 
> mechanism|http://maven.apache.org/plugins/maven-jar-plugin/usage.html] for 
> that kind of purpose, but I have been unable to make it work. We may have to 
> use (again) our {{sis-build-helper}} module for deleting the {{com/**}} files 
> before JAR packaging.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to