You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by mvsunil <mv...@gmail.com> on 2008/11/19 13:09:36 UTC

CXF endpoint with schema validation true

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
-- 
View this message in context: http://www.nabble.com/CXF-endpoint-with-schema-validation-true-tp20578529s22882p20578529.html
Sent from the Camel - Users mailing list archive at Nabble.com.


Re: CXF endpoint with schema validation true

Posted by Willem Jiang <wi...@gmail.com>.
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
>>>>
>>
>>
> 


Re: CXF endpoint with schema validation true

Posted by mvsunil <mv...@gmail.com>.
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
>>>>>>>
>>>
>>>
>> 
> 
> 
> 

-- 
View this message in context: http://www.nabble.com/CXF-endpoint-with-schema-validation-true-tp20578529s22882p20680297.html
Sent from the Camel - Users mailing list archive at Nabble.com.


Re: CXF endpoint with schema validation true

Posted by Willem Jiang <wi...@gmail.com>.
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
>>>>>>
>>
>>
> 


Re: CXF endpoint with schema validation true

Posted by mvsunil <mv...@gmail.com>.
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
>>>>>
>>>>>
>>>>
>>>
>> 
> 
> 
> 

-- 
View this message in context: http://www.nabble.com/CXF-endpoint-with-schema-validation-true-tp20578529s22882p20595928.html
Sent from the Camel - Users mailing list archive at Nabble.com.


Re: CXF endpoint with schema validation true

Posted by Willem Jiang <wi...@gmail.com>.
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
>>>>
>>>>
>>>
>>
> 


Re: CXF endpoint with schema validation true

Posted by mvsunil <mv...@gmail.com>.
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
>>> 
>>> 
>>> 
>> 
>> 
> 
> 

-- 
View this message in context: http://www.nabble.com/CXF-endpoint-with-schema-validation-true-tp20578529s22882p20595013.html
Sent from the Camel - Users mailing list archive at Nabble.com.


Re: CXF endpoint with schema validation true

Posted by Ashwin Karpe <as...@progress.com>.
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
>> 
>> 
>> 
> 
> 

-- 
View this message in context: http://www.nabble.com/CXF-endpoint-with-schema-validation-true-tp20578529s22882p20581336.html
Sent from the Camel - Users mailing list archive at Nabble.com.


Re: CXF endpoint with schema validation true

Posted by mvsunil <mv...@gmail.com>.
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
> 
> 
> 

-- 
View this message in context: http://www.nabble.com/CXF-endpoint-with-schema-validation-true-tp20578529s22882p20579388.html
Sent from the Camel - Users mailing list archive at Nabble.com.


Re: CXF endpoint with schema validation true

Posted by Willem Jiang <wi...@gmail.com>.
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