camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Willem Jiang <willem.ji...@gmail.com>
Subject Re: CXF endpoint with schema validation true
Date Tue, 25 Nov 2008 13:10:23 GMT
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
>>>>
>>
>>
> 


Mime
View raw message