cxf-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Freeman Fang <freeman.f...@gmail.com>
Subject Re: camel-cxf proxy failed wsdl reading with local schemaLocations
Date Mon, 30 Jun 2014 09:42:13 GMT
Hi,

I think you need use something like catalog.xml to redirect the remove schema url to the local
one you cached.
-------------
Freeman(Yue) Fang

Red Hat, Inc. 
FuseSource is now part of Red Hat



On 2014-6-30, at 下午5:23, Michael Täschner wrote:

> Dear CXF-Users,
> 
> I posted following questions at the camel users forum but got no
> reply. Could anyone here help me with configuring the schemalocations
> for a cxf proxy used via camel route (see below).
> 
> Thanks and Best Regards,
> Michael
> 
> ---------- Forwarded message ----------
> From: Michael Täschner <m.taeschner@gmail.com>
> Date: 2014-06-27 14:35 GMT+02:00
> Subject: Re: camel-cxf proxy failed wsdl reading with local schemaLocations
> To: users@camel.apache.org
> 
> 
> Hi,
> 
> could anybody give me a hint with this issue (using schemalocations
> with cxf:Endpoint) ?
> 
> Thanks and Regards,
> Michael
> 
> 2014-06-23 16:20 GMT+02:00 Michael Täschner <m.taeschner@gmail.com>:
>> Hi Camel-Riders,
>> 
>> we are (still) using SMX4.5 (Camel 2.10.7) and are trying to proxy a
>> SOAP call to external URL (plus reading statistics from input
>> message). For offline testing we have created a SoapUI mock target and
>> we declare schemaLocations inside the cxfEndpoint. Unfortunately the
>> schemata are not read at time of cxfEndpoint consumer creation:
>> 
>> 15:36:40,366 WARN  [ReflectionServiceFactoryBean] Failed to parse WSDL
>> javax.wsdl.WSDLException: WSDLException (at
>> /wsdl:definitions/wsdl:types/xsd:schema): faultCode=PARSER_ERROR:
>> Problem parsing
>> 'https://newskies-test.someairline.com/SessionManager.svc?xsd=xsd1'.:
>> java.net.UnknownHostException: newskies-test.someairline.com
>> at com.ibm.wsdl.xml.WSDLReaderImpl.getDocument(WSDLReaderImpl.java:2198)
>> at com.ibm.wsdl.xml.WSDLReaderImpl.parseSchema(WSDLReaderImpl.java:830)
>> at com.ibm.wsdl.xml.WSDLReaderImpl.parseSchema(WSDLReaderImpl.java:654)
>> at com.ibm.wsdl.xml.WSDLReaderImpl.parseTypes(WSDLReaderImpl.java:610)
>> at com.ibm.wsdl.xml.WSDLReaderImpl.parseDefinitions(WSDLReaderImpl.java:320)
>> at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(WSDLReaderImpl.java:2352)
>> at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(WSDLReaderImpl.java:2338)
>> at org.apache.cxf.wsdl11.WSDLManagerImpl.loadDefinition(WSDLManagerImpl.java:245)
>> at org.apache.cxf.wsdl11.WSDLManagerImpl.getDefinition(WSDLManagerImpl.java:190)
>> at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.isEmptywsdl(ReflectionServiceFactoryBean.java:2598)
>> at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.isFromWsdl(ReflectionServiceFactoryBean.java:543)
>> at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initializeServiceModel(ReflectionServiceFactoryBean.java:547)
>> at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.create(ReflectionServiceFactoryBean.java:265)
>> at org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(AbstractWSDLBasedEndpointFactory.java:101)
>> at org.apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.java:159)
>> at org.apache.camel.component.cxf.CxfConsumer.<init>(CxfConsumer.java:240)
>> at org.apache.camel.component.cxf.CxfEndpoint.createConsumer(CxfEndpoint.java:204)
>> 
>> We have dowloaded all corresponding schemata (e.g.
>> "https://newskies-test.someairline.com/SessionManager.svc?xsd=xsd1")
>> and referenced them via the schemaLocation config.
>> 
>> Following the endpoint and camelContext:
>> 
>> Endpoint definition:
>> <!-- this is the CXF web service we use as the front end -->
>> <cxf:cxfEndpoint id="frontendSessionManager"
>>    address="http://0.0.0.0:8090/SessionManager.svc"
>>    wsdlURL="etc/SessionManager/SessionManager.wsdl"
>>> 
>> 
>>    <!-- WSDL: wsdlURL="etc/SessionManager/SessionManager.wsdl"
>> wsdlURL="http://localhost:8088/SessionManager.svc?wsdl -->
>> <cxf:inInterceptors>
>> <ref bean="loggingInInterceptor" />
>> </cxf:inInterceptors>
>> <cxf:outInterceptors>
>> <ref bean="loggingOutInterceptor" />
>> <ref bean="sAAJOutInterceptor" />
>> <!-- ref bean="isb4uStatisticCalculatorInterceptor"/ -->
>> </cxf:outInterceptors>
>> <cxf:inFaultInterceptors>
>> <ref bean="loggingInInterceptor" />
>> </cxf:inFaultInterceptors>
>> <cxf:outFaultInterceptors>
>> <ref bean="loggingOutInterceptor" />
>> </cxf:outFaultInterceptors>
>> 
>>    <cxf:schemaLocations>
>>      <!--
>>      <cxf:schemaLocation>http://localhost:8088/SessionManager.svc?WSDL&amp;interface=BasicHttpBinding_ISessionManager&amp;part=SessionManager.xsd</cxf:schemaLocation>
>>       -->
>>      <cxf:schemaLocation>classpath:etc/SessionManager/xsd0-serviceContracts-sessionService.xsd</cxf:schemaLocation>
>>      <cxf:schemaLocation>classpath:etc/SessionManager/xsd1-serialization.xsd</cxf:schemaLocation>
>>      <cxf:schemaLocation>classpath:etc/SessionManager/xsd2-dataContracts-sessionService.xsd</cxf:schemaLocation>
>>      <cxf:schemaLocation>classpath:etc/SessionManager/xsd3-webservices.xsd</cxf:schemaLocation>
>>      <cxf:schemaLocation>classpath:etc/SessionManager/xsd4-webservices-dataContracts-common-enumerations.xsd</cxf:schemaLocation>
>>    </cxf:schemaLocations>
>> 
>> <cxf:properties>
>> <!-- Set the publishedEndpointUrl which could override the service
>> address from generated WSDL as you want -->
>> <!--
>> <entry key="publishedEndpointUrl" value="http://localhost:8090" />
>> -->
>> <entry key="synchronous" value="true" />
>> <!-- enable logging in cxf message mode -->
>> <entry key="dataFormat" value="MESSAGE" />
>>      <entry key="schema-validation-enabled" value="false" />
>>    </cxf:properties>
>> </cxf:cxfEndpoint>
>> 
>> CamelContext:
>> <!-- this is the Camel route which proxies the real web service and
>> forwards SOAP requests to it -->
>> <camel:camelContext id="context" streamCache="true" >
>> <!-- disable stream caching spool to disk -->
>> <camel:properties>
>> <camel:property key="CamelCachedOutputStreamThreshold" value="-1" />
>> </camel:properties>
>> <camel:endpoint id="backendSessionManager"
>> uri="http://localhost:8088/SessionManager.svc?httpClient.soTimeout=5000&amp;throwExceptionOnFailure=false"
>> />
>> 
>> <camel:route id="SessionManager" >
>> <!-- CXF consumer using MESSAGE format -->
>> <camel:from uri="cxf:bean:frontendSessionManager?dataFormat=MESSAGE" />
>> <camel:doTry>
>> <!-- send proxied request to real web service -->
>> <camel:to ref="backendSessionManager" />
>> </camel:doTry>
>> </camel:route>
>> </camel:camelContext>
>> 
>> There may be more errors in the definition but the failure to create
>> the cxfEndpoint consumer due to trying to look-up the schemata from
>> remote host instead of using the local copies is blocking our
>> progress.
>> 
>> The Root cause we tracked so far seems to be in
>> org.apache.cxf.service.factory.ReflectionServiceFactoryBean.buildServiceFromWSDL[1].
>> whereby the serviceFactory is created up front but schemaLocations are
>> only read at the end via "initializeDataBindings".
>> 
>> Any idea how to resolve this (i.e. get the cxfEndpoint consumer
>> started with local schemata) would be welcome!
>> Regards,
>> Michael
>> 
>> [1] http://grepcode.com/file/repo1.maven.org/maven2/org.apache.cxf/cxf-bundle/2.7.7/org/apache/cxf/service/factory/ReflectionServiceFactoryBean.java#407


Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message