Uploaded image for project: 'CXF'
  1. CXF
  2. CXF-7185

Xml validation with Mtom enabled is not working with french locale

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 2.7.18, 3.1.9
    • 3.1.10
    • JAXB Databinding
    • None
    • 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

          Activity

            People

              dkulp Daniel Kulp
              Kevin Buntrock Kevin Buntrock
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: