[
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)