Details
-
Type:
Bug
-
Status: Closed
-
Priority:
Major
-
Resolution: Fixed
-
Affects Version/s: 2.7.18, 3.1.9
-
Fix Version/s: 3.1.10
-
Component/s: JAXB Databinding
-
Labels:None
-
Estimated Complexity:Novice
Description
Running cxf on a tomcat launched with the jvm argument "-Duser.language=fr".
Mtom and schema validation are enabled.
While sending a soap message, we have this error : "Wrapped by: org.apache.camel.RuntimeCamelException: org.apache.cxf.interceptor.Fault: Marshalling Error: cvc-type.3.1.2 : L'élément 'xxx' est de type simple et ne doit comporter aucun enfant ([children]) de type élément d'information."
Reason is a lack in the hack allowing validation with mtom enabled in org.apache.cxf.jaxb.io.DataWriterImpl.java.
private static class MtomValidationHandler implements ValidationEventHandler { ValidationEventHandler origHandler; JAXBAttachmentMarshaller marshaller; public MtomValidationHandler(ValidationEventHandler v, JAXBAttachmentMarshaller m) { origHandler = v; marshaller = m; } public boolean handleEvent(ValidationEvent event) { // CXF-1194 this hack is specific to MTOM, so pretty safe to leave in here before calling the origHandler. String msg = event.getMessage(); if (msg.startsWith("cvc-type.3.1.2: ") && msg.contains(marshaller.getLastMTOMElementName().getLocalPart())) { return true; } if (origHandler != null) { return origHandler.handleEvent(event); } return false; } }
In french, the colon is always separated with a space from the preceding word : "cvc-type.3.1.2 : "
I would reckon to just not include the colon anymore in the checking. It seams useless according to this documentation : https://wiki.xmldation.com/Support/Validator
Looking quickly on the code, some other hacks should not work in french in the sibling class DataReaderImpl.java.
I will submit a pull request during the week-end to correct this issue.
Attachments
Issue Links
- links to