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.

Reply via email to