Hi , >From the route rule, I'm afraid you have to modify the wsdl file or just make sure the response object is OK for the schema validation. I don't think it is possible that you just enable the schema validation for unmashaling.
Willem mvsunil wrote: > Hi Willem, > Below is my spring based camel xml where the from route is CXF webservice. > > <beans xmlns="http://www.springframework.org/schema/beans" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > xmlns:jaxws="http://cxf.apache.org/jaxws" > xmlns:xs="http://www.w3.org/2001/XMLSchema" > xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" > xmlns:cxf="http://activemq.apache.org/camel/schema/cxfEndpoint" > xsi:schemaLocation=" > http://www.springframework.org/schema/beans > http://www.springframework.org/schema/beans/spring-beans-2.0.xsd > http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd > http://activemq.apache.org/camel/schema/cxfEndpoint > > http://activemq.apache.org/camel/schema/cxf/cxfEndpoint.xsd > http://activemq.apache.org/camel/schema/spring > > http://activemq.apache.org/camel/schema/spring/camel-spring.xsd"> > > <import resource="classpath:META-INF/cxf/cxf.xml" /> > <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" /> > <import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> > <cxf:cxfEndpoint id="accountManagementEndpoint" > address="/AccountManagement" > > wsdlURL="/WEB-INF/wsdl/extn_parlayx_account_management_service_2_2.wsdl" > serviceClass="com.hp.rmm.ce.accmgmt.AccountManagement" > endpointName="s:AccountManagement" > serviceName="s:AccountManagementService" > > xmlns:s="http://www.csapi.org/wsdl/parlayx/account_management/v2_2/service"> > <cxf:properties> > <entry key="schema-validation-enabled" value="true" /> > </cxf:properties> > </cxf:cxfEndpoint> > <route> > <from uri="cxf:bean:accountManagementEndpoint" /> > <choice> > <when> > <jxpath>/in/headers/@operationName = > 'createAccount'</jxpath> > <bean ref="processBean" > method="processCreateAccount" /> > > <try> > <to > uri="jdbc:dataSource?readSize=100" /> > <catch> > > <exception>java.lang.Exception</exception> > <bean ref="processBean" > method="setException" /> > </catch> > </try> > <bean ref="processBean" > method="processCreateResult" /> > </when> > </choice> > </route> > </camelContext> > </beans> > > Thanks, > Sunil. > > willem.jiang wrote: >> Hi , >> >> Can you show me the rule DSL ? >> Maybe we can just enable the schema validation at a certain endpoint. >> >> Willem >> >> mvsunil wrote: >>> Hi Ashwin, >>> >>> Yes I agree schema validation happens both for request and response, But >>> i >>> am sending a response with all objects set. The error i get is something >>> to >>> do with target namespace i guess but not sure. Is there a way to disable >>> schema validation in response alone. >>> >>> Thanks, >>> Sunil. >>> >>> >>> Ashwin Karpe wrote: >>>> Hi Sunil, >>>> >>>> Schema validation happen on both the incoming and outgoing payloads to >>>> validate conformace against WSDL. If the response is empty since it was >>>> not set by your Impl code, the JAXBMarshaller will throw such an >>>> exception. >>>> >>>> Note that JAXB is the standard the converts your java object into XML >>>> that >>>> is place in the SOAP envelope before dispactching it to the client. >>>> >>>> Hope this helps. >>>> >>>> Cheers, >>>> >>>> Ashwin... >>>> >>>> >>>> mvsunil wrote: >>>>> Hi willem, >>>>> >>>>> Thanks for the reply. >>>>> >>>>> I get this error only in response. I am able to get the input values >>>>> from >>>>> the request to my bean and i am able to process it. The exception >>>>> occurs >>>>> in the response. The whole thing works fine when the schema validation >>>>> is >>>>> set to false. >>>>> >>>>> Thanks, >>>>> Sunil. >>>>> >>>>> >>>>> willem.jiang wrote: >>>>>> Hi , >>>>>> >>>>>> Does your request's uri element's value be empty string? >>>>>> If the WSDL has such of restriction, you will get the error when you >>>>>> enable the schema check. >>>>>> >>>>>> Willem >>>>>> mvsunil wrote: >>>>>>> Hi, >>>>>>> >>>>>>> I am using CXF webservice as camel from uri and to uri is to a bean >>>>>>> which >>>>>>> does a jdbc operation and return the result of the jdbc operation. >>>>>>> generated >>>>>>> java code using wsdl2Java of cxf. The whole thing works fine when >>>>>>> the >>>>>>> schema validation of cxf is set to false. When i enable the schema >>>>>>> validation the request comes to the bean but when it tried to send >>>>>>> the >>>>>>> response i get "Marshalling Error: The uri may not be theempty >>>>>>> string". >>>>>>> I am >>>>>>> using apache-cxf-2.1.2 and camel apache-camel-1.4.0 >>>>>>> >>>>>>> The exception i get is >>>>>>> >>>>>>> org.apache.cxf.interceptor.Fault: Marshalling Error: The uri may not >>>>>>> be >>>>>>> theempty string. >>>>>>> at >>>>>>> org.apache.cxf.jaxb.JAXBEncoderDecoder.marshall(JAXBEncoderDecoder.java:176) >>>>>>> at >>>>>>> org.apache.cxf.jaxb.io.DataWriterImpl.write(DataWriterImpl.java:131) >>>>>>> at >>>>>>> org.apache.cxf.interceptor.AbstractOutDatabindingInterceptor.writeParts(AbstractOutDatabindingInterceptor.java:113) >>>>>>> at >>>>>>> org.apache.cxf.interceptor.BareOutInterceptor.handleMessage(BareOutInterceptor.java:68) >>>>>>> at >>>>>>> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:220) >>>>>>> at >>>>>>> org.apache.cxf.interceptor.OutgoingChainInterceptor.handleMessage(OutgoingChainInterceptor.java:74) >>>>>>> at >>>>>>> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:220) >>>>>>> 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:283) >>>>>>> at >>>>>>> org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:166) >>>>>>> at >>>>>>> org.apache.cxf.transport.servlet.AbstractCXFServlet.invoke(AbstractCXFServlet.java:174) >>>>>>> at >>>>>>> org.apache.cxf.transport.servlet.AbstractCXFServlet.doPost(AbstractCXFServlet.java:152) >>>>>>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:763) >>>>>>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:856) >>>>>>> at >>>>>>> weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227) >>>>>>> at >>>>>>> weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125) >>>>>>> at >>>>>>> weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:283) >>>>>>> at >>>>>>> weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:175) >>>>>>> at >>>>>>> weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3231) >>>>>>> at >>>>>>> weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) >>>>>>> at >>>>>>> weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121) >>>>>>> at >>>>>>> weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2002) >>>>>>> at >>>>>>> weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:1908) >>>>>>> at >>>>>>> weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1362) >>>>>>> at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209) >>>>>>> at weblogic.work.ExecuteThread.run(ExecuteThread.java:181) >>>>>>> Caused by: java.lang.IllegalArgumentException: The uri may not be >>>>>>> theempty >>>>>>> string. >>>>>>> at >>>>>>> weblogic.xml.stax.util.NamespaceContextImpl.getPrefix(NamespaceContextImpl.java:76) >>>>>>> at >>>>>>> org.apache.cxf.staxutils.CachingXmlEventWriter$NSContext.getPrefix(CachingXmlEventWriter.java:266) >>>>>>> at >>>>>>> com.sun.xml.bind.v2.runtime.StAXPostInitAction.run(StAXPostInitAction.java:95) >>>>>>> at >>>>>>> com.sun.xml.bind.v2.runtime.MarshallerImpl.prewrite(MarshallerImpl.java:365) >>>>>>> at >>>>>>> com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:327) >>>>>>> at >>>>>>> com.sun.xml.bind.v2.runtime.MarshallerImpl.marshal(MarshallerImpl.java:175) >>>>>>> at >>>>>>> org.apache.cxf.jaxb.JAXBEncoderDecoder.writeObject(JAXBEncoderDecoder.java:377) >>>>>>> at >>>>>>> org.apache.cxf.jaxb.JAXBEncoderDecoder.marshall(JAXBEncoderDecoder.java:155) >>>>>>> ... 26 more >>>>>> >> >> >
