1 Reply Latest reply on Jul 28, 2008 3:15 AM by Richard Opalka

    SchemaValidation doesn't work with some special characters

    Houla Shimti Newbie

      Hi everyone!

      We're trying to use @SchemaValidation for our WebService. It works great as long as there is no umlaut (a special german letter like an o with two dots on top) in the content. If there is one, we get the following exception:

      org.jboss.ws.WSException: org.xml.sax.SAXParseException: Invalid byte 1 of 1-byte UTF-8 sequence.
       at org.jboss.ws.WSException.rethrow(WSException.java:68)
       at org.jboss.ws.core.soap.SOAPBodyElementDoc.validatePayload(SOAPBodyElementDoc.java:130)
       at org.jboss.ws.core.soap.SOAPBodyElementDoc.transitionTo(SOAPBodyElementDoc.java:82)
       at org.jboss.ws.core.soap.SOAPContentElement.getObjectValue(SOAPContentElement.java:173)
       at org.jboss.ws.core.EndpointInvocation.transformPayloadValue(EndpointInvocation.java:263)
       at org.jboss.ws.core.EndpointInvocation.getRequestParamValue(EndpointInvocation.java:115)
       at org.jboss.ws.core.EndpointInvocation.getRequestPayload(EndpointInvocation.java:135)
       at org.jboss.ws.core.server.DelegatingInvocation.getArgs(DelegatingInvocation.java:82)
       at org.jboss.wsf.container.jboss42.InvocationHandlerEJB3.invoke(InvocationHandlerEJB3.java:95)
       at org.jboss.ws.core.server.ServiceEndpointInvoker.invoke(ServiceEndpointInvoker.java:221)
       at org.jboss.wsf.stack.jbws.RequestHandlerImpl.processRequest(RequestHandlerImpl.java:466)
       at org.jboss.wsf.stack.jbws.RequestHandlerImpl.handleRequest(RequestHandlerImpl.java:284)
       at org.jboss.wsf.stack.jbws.RequestHandlerImpl.doPost(RequestHandlerImpl.java:201)
       at org.jboss.wsf.stack.jbws.RequestHandlerImpl.handleHttpRequest(RequestHandlerImpl.java:134)
       at org.jboss.wsf.stack.jbws.EndpointServlet.service(EndpointServlet.java:84)
       at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
       at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
       at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
       at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
       at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
       at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
       at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
       at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
       at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)
       at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
       at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
       at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
       at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
       at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
       at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
       at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
       at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
       at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
       at java.lang.Thread.run(Thread.java:613)
      ...
      


      We had a look on the source of the JBossWS-code and found the following line in org.jboss.ws.extensions.validation.SchemaValidationHelper:
      ByteArrayInputStream bais = new ByteArrayInputStream(inxml.getBytes());
      

      It works perfectly (at least on our tests) if we change it to
      ByteArrayInputStream bais = new ByteArrayInputStream(inxml.getBytes("UTF-8"));
      

      But: We're not sure if this is a general solution. While digging deeper through the code we found the following: In InputSource (which is used by the parser which validates the document), there should be some magical automation which should determine the right encoding. But that doesn't seem to work. It seems that this automatism allways determines UTF-8, even if it is ISO-8859-1 or MacRoman or ...

      We're using JBossAS 4.2.2 whith JBossWS 3.0.1 or 3.0.2 GA under MacOS 10.4.

      Does anyone have an idea whats going wrong here? Do I do something wrong or is it a bug in JBossWS?

      Thanks!

      Houla