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
>>>>
>>
>>
> 

Reply via email to