Return-Path: Delivered-To: apmail-cxf-issues-archive@www.apache.org Received: (qmail 34232 invoked from network); 28 May 2008 12:34:20 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 28 May 2008 12:34:20 -0000 Received: (qmail 99515 invoked by uid 500); 28 May 2008 12:34:19 -0000 Delivered-To: apmail-cxf-issues-archive@cxf.apache.org Received: (qmail 99495 invoked by uid 500); 28 May 2008 12:34:19 -0000 Mailing-List: contact issues-help@cxf.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cxf.apache.org Delivered-To: mailing list issues@cxf.apache.org Received: (qmail 99476 invoked by uid 99); 28 May 2008 12:34:18 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 28 May 2008 05:34:18 -0700 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.140] (HELO brutus.apache.org) (140.211.11.140) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 28 May 2008 12:33:28 +0000 Received: from brutus (localhost [127.0.0.1]) by brutus.apache.org (Postfix) with ESMTP id 110A6234C127 for ; Wed, 28 May 2008 05:33:45 -0700 (PDT) Message-ID: <1228040733.1211978025068.JavaMail.jira@brutus> Date: Wed, 28 May 2008 05:33:45 -0700 (PDT) From: "Marcel Heemskerk (JIRA)" To: issues@cxf.apache.org Subject: [jira] Commented: (CXF-1614) Bug in CXF Validation, SOAP Fault produces invalid XML In-Reply-To: <667937381.1211964585016.JavaMail.jira@brutus> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Virus-Checked: Checked by ClamAV on apache.org [ https://issues.apache.org/jira/browse/CXF-1614?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12600454#action_12600454 ] Marcel Heemskerk commented on CXF-1614: --------------------------------------- yes, you are right, it is duplicate of 1551 when i return a brand new and empty 'new MyResponse( )' a correct SOAP Fault is thrown... Thanks for the quick feedback! - Marcel > Bug in CXF Validation, SOAP Fault produces invalid XML > ------------------------------------------------------ > > Key: CXF-1614 > URL: https://issues.apache.org/jira/browse/CXF-1614 > Project: CXF > Issue Type: Bug > Affects Versions: 2.1 > Environment: Windows Server 2003, MyEclipse 6.01, Tomcat 5.5 > Reporter: Marcel Heemskerk > Priority: Blocker > > SUMMARY: > When using a xsd:simpleType with pattern restriction, a non-valid reponse message (which generates a SAXParseException) results in CXF returning invalid XML (missing ">" etc...), instead of CXF returning a proper SOAP Fault. I think this is a major issue! > Any help on this problem really really appreciated! > EXPLANATION + REPRODUCTION DETAILS: > In here I will put all the information needed to reproduce the bug. We have a web service with external schema, xsd1.xsd > > > > > > > > > /xsd:element> > This includes xsd2.xsd where Datum is defined as a pattern for year month day in yyyymmdd: > > > > > > > We use CXF 2.1, with JAXB binding. > The service operation looks like: > public MyResponse doSomething(MyRequest, Holder In the MyResponse is a StartPeriod which does NOT comply with the XSD. It contains the value "21130" (without quotes). > In the Spring config we turned on validation: > > > > > > Now.... I would have expected CXF to return a SOAP-FAULT... but instead it returns: > > > > > > > > > > soap:ServerMarshalling Error: cvc-pattern-valid: Value '21130' is not facet-valid with respect to pattern '[1-2][0-9]{3}(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|3[0-1])' for type 'Datum'. > The stacktrace i got is: > INFO: Interceptor has thrown exception, unwinding now > org.apache.cxf.interceptor.Fault: Marshalling Error: cvc-pattern-valid: Value '21130' is not facet-valid with respect to pattern '[1-2][0-9]{3}(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|3[0-1])' for type 'Datum'. > at org.apache.cxf.jaxb.JAXBEncoderDecoder.marshall(JAXBEncoderDecoder.java:208) > at org.apache.cxf.jaxb.io.DataWriterImpl.write(DataWriterImpl.java:79) > at org.apache.cxf.interceptor.AbstractOutDatabindingInterceptor.writeParts(AbstractOutDatabindingInterceptor.java:86) > at org.apache.cxf.interceptor.BareOutInterceptor.handleMessage(BareOutInterceptor.java:68) > at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:221) > at org.apache.cxf.interceptor.OutgoingChainInterceptor.handleMessage(OutgoingChainInterceptor.java:74) > at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:221) > at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:78) > at org.apache.cxf.transport.servlet.ServletDestination.invoke(ServletDestination.java:92) > at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:214) > at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:151) > at org.apache.cxf.transport.servlet.AbstractCXFServlet.invoke(AbstractCXFServlet.java:170) > at org.apache.cxf.transport.servlet.AbstractCXFServlet.doPost(AbstractCXFServlet.java:148) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:710) > 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.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) > at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) > at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) > at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) > at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) > at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263) > at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) > at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584) > at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) > at java.lang.Thread.run(Thread.java:595) > Caused by: javax.xml.bind.MarshalException > - with linked exception: > [org.xml.sax.SAXParseException: cvc-pattern-valid: Value '21130' is not facet-valid with respect to pattern '[1-2][0-9]{3}(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|3[0-1])' for type 'Datum'.] > at com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:331) > at com.sun.xml.bind.v2.runtime.MarshallerImpl.marshal(MarshallerImpl.java:257) > at javax.xml.bind.helpers.AbstractMarshallerImpl.marshal(AbstractMarshallerImpl.java:75) > at org.apache.cxf.jaxb.JAXBEncoderDecoder.writeObject(JAXBEncoderDecoder.java:436) > at org.apache.cxf.jaxb.JAXBEncoderDecoder.marshall(JAXBEncoderDecoder.java:189) > ... 26 more > Caused by: org.xml.sax.SAXParseException: cvc-pattern-valid: Value '21130' is not facet-valid with respect to pattern '[1-2][0-9]{3}(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|3[0-1])' for type 'Datum'. > at com.sun.org.apache.xerces.internal.jaxp.validation.Util.toSAXParseException(Util.java:109) > at com.sun.org.apache.xerces.internal.jaxp.validation.ErrorHandlerAdaptor.error(ErrorHandlerAdaptor.java:104) > at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:382) > at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:316) > at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator$XSIErrorReporter.reportError(XMLSchemaValidator.java:429) > at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.reportSchemaError(XMLSchemaValidator.java:3185) > at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.elementLocallyValidType(XMLSchemaValidator.java:3113) > at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.processElementContent(XMLSchemaValidator.java:3025) > at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.handleEndElement(XMLSchemaValidator.java:2178) > at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.endElement(XMLSchemaValidator.java:814) > at com.sun.org.apache.xerces.internal.jaxp.validation.ValidatorHandlerImpl.endElement(ValidatorHandlerImpl.java:345) > at org.xml.sax.helpers.XMLFilterImpl.endElement(XMLFilterImpl.java:546) > at com.sun.xml.bind.v2.runtime.output.SAXOutput.endTag(SAXOutput.java:128) > at com.sun.xml.bind.v2.runtime.output.XmlOutputAbstractImpl.endTag(XmlOutputAbstractImpl.java:120) > at com.sun.xml.bind.v2.runtime.output.ForkXmlOutput.endTag(ForkXmlOutput.java:87) > at com.sun.xml.bind.v2.runtime.XMLSerializer.leafElement(XMLSerializer.java:322) > at com.sun.xml.bind.v2.model.impl.RuntimeBuiltinLeafInfoImpl$1.writeLeafElement(RuntimeBuiltinLeafInfoImpl.java:210) > at com.sun.xml.bind.v2.model.impl.RuntimeBuiltinLeafInfoImpl$1.writeLeafElement(RuntimeBuiltinLeafInfoImpl.java:209) > at com.sun.xml.bind.v2.runtime.reflect.TransducedAccessor$CompositeTransducedAccessorImpl.writeLeafElement(TransducedAccessor.java:250) > at com.sun.xml.bind.v2.runtime.property.SingleElementLeafProperty.serializeBody(SingleElementLeafProperty.java:98) > at com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:322) > at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:681) > at com.sun.xml.bind.v2.runtime.property.ArrayElementNodeProperty.serializeItem(ArrayElementNodeProperty.java:65) > at com.sun.xml.bind.v2.runtime.property.ArrayElementProperty.serializeListBody(ArrayElementProperty.java:168) > at com.sun.xml.bind.v2.runtime.property.ArrayERProperty.serializeBody(ArrayERProperty.java:152) > at com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:322) > at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:681) > at com.sun.xml.bind.v2.runtime.property.SingleElementNodeProperty.serializeBody(SingleElementNodeProperty.java:150) > at com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:322) > at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:681) > at com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl$1.serializeBody(ElementBeanInfoImpl.java:151) > at com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl$1.serializeBody(ElementBeanInfoImpl.java:185) > at com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl.serializeBody(ElementBeanInfoImpl.java:305) > at com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl.serializeRoot(ElementBeanInfoImpl.java:312) > at com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl.serializeRoot(ElementBeanInfoImpl.java:71) > at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsRoot(XMLSerializer.java:490) > at com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:328) > ... 30 more > To see what is wrong, i added in the service method, just before the return, the following code. > Class[] responseClasses = { MyResponse.class }; > JAXBContext responseContext = JAXBContext.newInstance(responseClasses); > Marshaller responseMarshaller = responseContext.createMarshaller(); > responseMarshaller.marshal(response,System.err); > This produces correct XML, but non-compliant with the XSD because there is a Datum tag with a "21130" value. > Cheers, > - Marcel Heemskerk -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.