Hi, >From the stack trace I found the error is on the server side marshaling the response message. It didn't relate any of camel-cxf component. Can you set the uri value with a not null value in the AccountManagementImpl?
Did you try to use the CXF client|server which were generated form wsdl2java to play with parlayx wsdl? Willem mvsunil wrote: > Hi Willem, > > I tried the schema validation of CXF on parlayx wsdl - > parlayx_account_management_service_2_2.wsdl and it fails. Steps done are > 1) did wsdl2java of the wsdl parlayx_account_management_service_2_2.wsdl > 2) Defined cxf-config.xml as below > > <beans xmlns="http://www.springframework.org/schema/beans" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > xmlns:jaxws="http://cxf.apache.org/jaxws" > 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"> > > <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" /> > > <!-- implementation of the webservice --> > <bean id="accountManagementImpl" > class="com.hp.parlayx.AccountManagementImpl" /> > > <!-- export the webservice using jaxws --> > <jaxws:endpoint id="accountManagement" > implementor="#accountManagementImpl" > address="/AccountManagement" > > wsdlLocation="/WEB-INF/wsdl/parlayx_account_management_service_2_2.wsdl" > endpointName="s:AccountManagement" > serviceName="s:AccountManagementService" > > xmlns:s="http://www.csapi.org/wsdl/parlayx/account_management/v2_2/service"> > <jaxws:properties> > <entry key="schema-validation-enabled" value="true" /> > </jaxws:properties> > </jaxws:endpoint> > </beans> > > 3) deployed the war in weblogic 9.2 > 4) Invoked it from SoapUI. I get the error back in Soap UI as > > <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> > <soap:Body> > <soap:Fault> > <faultcode>soap:Server</faultcode> > <faultstring>Marshalling Error: The uri may not be theempty > string.</faultstring> > </soap:Fault> > </soap:Body> > </soap:Envelope> > > and the exception thrown is > > org.apache.cxf.interceptor.Fault: Marshalling Error: The uri may not be > theempty > string. > at > org.apache.cxf.jaxb.JAXBEncoderDecoder.marshall(JAXBEncoderDecoder.ja > va:176) > at > org.apache.cxf.jaxb.io.DataWriterImpl.write(DataWriterImpl.java:131) > at > org.apache.cxf.interceptor.AbstractOutDatabindingInterceptor.writePar > ts(AbstractOutDatabindingInterceptor.java:113) > at > org.apache.cxf.interceptor.BareOutInterceptor.handleMessage(BareOutIn > terceptor.java:68) > at > org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseIntercept > orChain.java:220) > at > org.apache.cxf.interceptor.OutgoingChainInterceptor.handleMessage(Out > goingChainInterceptor.java:74) > at > org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseIntercept > orChain.java:220) > at > org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainIniti > ationObserver.java:78) > at > org.apache.cxf.transport.servlet.ServletDestination.invoke(ServletDes > tination.java:92) > at > org.apache.cxf.transport.servlet.ServletController.invokeDestination( > ServletController.java:283) > at > org.apache.cxf.transport.servlet.ServletController.invoke(ServletCont > roller.java:166) > at > org.apache.cxf.transport.servlet.AbstractCXFServlet.invoke(AbstractCX > FServlet.java:174) > at > org.apache.cxf.transport.servlet.AbstractCXFServlet.doPost(AbstractCX > FServlet.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(StubSecuri > tyHelper.java:125) > at > weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.jav > a:283) > at > weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.jav > a:175) > at > weblogic.servlet.internal.WebAppServletContext$ServletInvocationActio > n.run(WebAppServletContext.java:3231) > at > weblogic.security.acl.internal.AuthenticatedSubject.doAs(Authenticate > dSubject.java:321) > at > weblogic.security.service.SecurityManager.runAs(SecurityManager.java: > 121) > at > weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppS > ervletContext.java:2002) > at > weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletC > ontext.java:1908) > at > weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.j > ava: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 > strin > g. > at > weblogic.xml.stax.util.NamespaceContextImpl.getPrefix(NamespaceContex > tImpl.java:76) > at > org.apache.cxf.staxutils.CachingXmlEventWriter$NSContext.getPrefix(Ca > chingXmlEventWriter.java:266) > at > com.sun.xml.bind.v2.runtime.StAXPostInitAction.run(StAXPostInitAction > .java:95) > at > com.sun.xml.bind.v2.runtime.MarshallerImpl.prewrite(MarshallerImpl.ja > va:365) > at > com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java: > 327) > at > com.sun.xml.bind.v2.runtime.MarshallerImpl.marshal(MarshallerImpl.jav > a:175) > at > org.apache.cxf.jaxb.JAXBEncoderDecoder.writeObject(JAXBEncoderDecoder > .java:377) > at > org.apache.cxf.jaxb.JAXBEncoderDecoder.marshall(JAXBEncoderDecoder.ja > va:155) > ... 26 more > > > Need help desperately. > > Thanks Sunil. > > willem.jiang wrote: >> 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 >>>> >> >> >
