[ 
https://issues.apache.org/jira/browse/TAVERNA-920?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15157962#comment-15157962
 ] 

Stian Soiland-Reyes commented on TAVERNA-920:
---------------------------------------------

After investigating the implementation types involved, I think it's more of an 
issue that the xmlns attributes come in a hashmap or something.

If I add an explicit NamespacePrefixMapper AND use jaxb-impl, then it seems to 
be consistently working - even on Windows 10 :)

{code}
        public static class ManifestNamespacePrefixMapperJAXB_RI extends
                        NamespacePrefixMapper {
                @Override
                public String[] getPreDeclaredNamespaceUris() {
                        return super.getPreDeclaredNamespaceUris();
                }

                @Override
                public String getPreferredPrefix(String namespaceUri,
                                String suggestion, boolean requirePrefix) {
                        if 
(namespaceUri.equals("urn:oasis:names:tc:opendocument:xmlns:manifest:1.0"))
                                return "manifest";
                        if 
(namespaceUri.equals("urn:oasis:names:tc:opendocument:xmlns:container"))
                                return "";
                        if 
(namespaceUri.equals("http://www.w3.org/2000/09/xmldsig#";))
                                return "xmldsig";
                        if 
(namespaceUri.equals("http://www.w3.org/2001/04/xmlenc#";))
                                return "xmlenc";
                        return suggestion;
                }
        }
        private static boolean warnedPrefixMapper;
        protected static synchronized Marshaller createMarshaller()
                        throws JAXBException {
                Marshaller marshaller = getJaxbContext().createMarshaller();
                setPrefixMapper(marshaller);
                return marshaller;
        }
        protected static void setPrefixMapper(Marshaller marshaller) {
                boolean setPrefixMapper = false;

                try {
                        /*
                         * This only works with JAXB RI, in which case we can 
set the
                         * namespace prefix mapper
                         */
                        
Class.forName("com.sun.xml.bind.marshaller.NamespacePrefixMapper");
                        
marshaller.setProperty("com.sun.xml.bind.namespacePrefixMapper",
                                        new 
ManifestNamespacePrefixMapperJAXB_RI());
                        /*
                         * Note: A similar mapper for the built-in java
                         * (com.sun.xml.bind.internal.namespacePrefixMapper) is 
no longer
                         * included here, as it will not (easily) compile with 
Maven.
                         */
                        setPrefixMapper = true;
                } catch (Exception e) {
                        logger.log(FINE, "Can't find NamespacePrefixMapper", e);
                }

                if (!setPrefixMapper && !warnedPrefixMapper) {
                        logger.info("Could not set prefix mapper (missing or 
incompatible JAXB) "
                                        + "- will use prefixes ns0, ns1, ..");
                        warnedPrefixMapper = true;
                }
        }
{code}

Now I get test success 5/5 times.

I'll do another RC4 of taverna-language ....yay.

> TestUCFPackage fails due to wrong namespace
> -------------------------------------------
>
>                 Key: TAVERNA-920
>                 URL: https://issues.apache.org/jira/browse/TAVERNA-920
>             Project: Apache Taverna
>          Issue Type: Bug
>          Components: Taverna Language
>    Affects Versions: language 0.15.1
>         Environment: Windows 10 x/64
> Apache Maven 3.2.5 (12a6b3acb947671f09b81f49094c53f426d8cea1; 
> 2014-12-14T17:29:23+00:00)
> Maven home: C:\Program Files\apache-maven-3.2.5\bin\..
> Java version: 1.8.0_40, vendor: Oracle Corporation
> Java home: C:\Program Files\Java\jdk1.8.0_40\jre
> Default locale: en_GB, platform encoding: Cp1252
> OS name: "windows 8.1", version: "6.3", arch: "amd64", family: "dos"
>            Reporter: Stian Soiland-Reyes
>            Assignee: Stian Soiland-Reyes
>             Fix For: language 0.15.1
>
>
> Testing 
> https://dist.apache.org/repos/dist/dev/incubator/taverna/source/taverna-language-0.15.1-incubating-RC2/
>  on Windows 10 fails:
> {code}
> Tests run: 34, Failures: 3, Errors: 0, Skipped: 0, Time elapsed: 1.111 sec 
> <<< FAILURE! - in org.apache.taverna.scufl2.ucfpackage.TestUCFPackage
> setRootfileSaved(org.apache.taverna.scufl2.ucfpackage.TestUCFPackage)  Time 
> elapsed: 0.02 sec  <<< FAILURE!
> org.junit.ComparisonFailure: expected:<[]> but was:<[ns3]>
>         at org.junit.Assert.assertEquals(Assert.java:115)
>         at org.junit.Assert.assertEquals(Assert.java:144)
>         at 
> org.apache.taverna.scufl2.ucfpackage.TestUCFPackage.setRootfileSaved(TestUCFPackage.java:656)
> addResourceContainerXml(org.apache.taverna.scufl2.ucfpackage.TestUCFPackage)  
> Time elapsed: 0.042 sec  <<< FAILURE!
> org.junit.ComparisonFailure: expected:<[]> but was:<[ns3]>
>         at org.junit.Assert.assertEquals(Assert.java:115)
>         at org.junit.Assert.assertEquals(Assert.java:144)
>         at 
> org.apache.taverna.scufl2.ucfpackage.TestUCFPackage.addResourceContainerXml(TestUCFPackage.java:708)
> setRootfileExtendsContainerXml(org.apache.taverna.scufl2.ucfpackage.TestUCFPackage)
>   Time elapsed: 0.023 sec  <<< FAILURE!
> org.junit.ComparisonFailure: expected:<[]> but was:<[ns3]>
>         at org.junit.Assert.assertEquals(Assert.java:115)
>         at org.junit.Assert.assertEquals(Assert.java:144)
>         at 
> org.apache.taverna.scufl2.ucfpackage.TestUCFPackage.setRootfileExtendsContainerXml(TestUCFPackage.java:787)
> {code}
> Something to do with the bundled xerces. 
> This looks like the same bug reported by Alan in 
> http://mail-archives.apache.org/mod_mbox/taverna-dev/201602.mbox/%3C56C717EC.4080401%40googlemail.com%3E



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

Reply via email to