[ https://issues.apache.org/jira/browse/CXF-4715?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15193128#comment-15193128 ]
Colm O hEigeartaigh commented on CXF-4715: ------------------------------------------ Please log a separate JIRA with a test-case to reproduce the issue. Colm. > WS-security encrypted elements with XPath . CXF generates wsu:Id attribute, > XSD validation on Metro fails > --------------------------------------------------------------------------------------------------------- > > Key: CXF-4715 > URL: https://issues.apache.org/jira/browse/CXF-4715 > Project: CXF > Issue Type: Bug > Components: WS-* Components > Affects Versions: 2.6.1, 2.7.1 > Environment: JDK 1.7.0_02 > Windows 7 > Tomcat 6.0.29 > Metro 1.5 / 2.2 server > Reporter: Franck WIELGUS > Assignee: Daniel Kulp > Priority: Minor > Fix For: 2.5.8, 2.6.5, 2.7.2 > > Attachments: cxf_decrypted_request.txt, cxf_request.txt, > cxf_signed_request.txt, helloclient.wsdl, metro_decrypted_request.txt, > metro_request.txt, metro_signed_request.txt > > > The problem is related to WS-security policies enforcement by a CXF client > and the generated message compared to what is expected by a Metro server when > XSD validation is turned on. > The following policy is used : > <wsp:Policy wsu:Id="chiffr_elt_policy"> > <wsp:ExactlyOne> > <wsp:All> > <sp:EncryptedElements > > xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702"> > <sp:XPath> > > //*[local-name()='inputToEncrypt'] > </sp:XPath> > </sp:EncryptedElements> > </wsp:All> > </wsp:ExactlyOne> > </wsp:Policy> > CXF client encrypts the element matching the XPath expression, but it seems > to add a "wsu:Id" attribute that is not allowed by Metro (not allowed by the > XSD of "inputToEncrypt" element). When the server analyzes the request and > tries to validate the message against the XSD, the following error appears : > javax.xml.ws.WebServiceException: org.xml.sax.SAXParseException; > cvc-complex-type.3.2.2 : L'attribut 'wsu:Id' n'est pas autorisé dans > l'élément 'inputToEncrypt'. > at > com.sun.xml.ws.util.pipe.AbstractSchemaValidationTube.doProcess(AbstractSchemaValidationTube.java:242) > at > com.sun.xml.ws.util.pipe.AbstractSchemaValidationTube.processRequest(AbstractSchemaValidationTube.java:211) > at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:598) > at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:557) > at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:542) > at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:439) > at > com.sun.xml.ws.server.WSEndpointImpl$2.process(WSEndpointImpl.java:243) > at > com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:471) > at > com.sun.xml.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:244) > at > com.sun.xml.ws.transport.http.servlet.ServletAdapter.handle(ServletAdapter.java:135) > at > com.sun.xml.ws.transport.http.servlet.WSServletDelegate.doGet(WSServletDelegate.java:129) > at > com.sun.xml.ws.transport.http.servlet.WSServletDelegate.doPost(WSServletDelegate.java:160) > at > com.sun.xml.ws.transport.http.servlet.WSServlet.doPost(WSServlet.java:75) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) > 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:191) > at > org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) > 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:298) > at > org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857) > at > org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) > at > org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) > at java.lang.Thread.run(Thread.java:722) > Caused by: org.xml.sax.SAXParseException; cvc-complex-type.3.2.2 : L'attribut > 'wsu:Id' n'est pas autorisé dans l'élément 'inputToEncrypt'. > at > com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:198) > at > com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:134) > at > com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:437) > at > com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:368) > at > com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:325) > at > com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator$XSIErrorReporter.reportError(XMLSchemaValidator.java:449) > at > com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.reportSchemaError(XMLSchemaValidator.java:3228) > at > com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.processAttributes(XMLSchemaValidator.java:2705) > at > com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.handleStartElement(XMLSchemaValidator.java:2047) > at > com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.startElement(XMLSchemaValidator.java:737) > at > com.sun.org.apache.xerces.internal.jaxp.validation.DOMValidatorHelper.beginNode(DOMValidatorHelper.java:276) > at > com.sun.org.apache.xerces.internal.jaxp.validation.DOMValidatorHelper.validate(DOMValidatorHelper.java:243) > at > com.sun.org.apache.xerces.internal.jaxp.validation.DOMValidatorHelper.validate(DOMValidatorHelper.java:189) > at > com.sun.org.apache.xerces.internal.jaxp.validation.ValidatorImpl.validate(ValidatorImpl.java:109) > at javax.xml.validation.Validator.validate(Validator.java:124) > at > com.sun.xml.ws.util.pipe.AbstractSchemaValidationTube.doProcess(AbstractSchemaValidationTube.java:240) > ... 26 more > The workaround is to delete @SchemaValidation in the service class on Metro > server to disable XSD validation. > A Metro client with the same policy does not have this behavior and the XSD > validation is fine. -- This message was sent by Atlassian JIRA (v6.3.4#6332)