Hi Again, concerning the usage of catalog.xml in combination with cxf-Endpoint for a webservice-proxy. Can anyone provide an example how to configure the catalog.xml for the cxf Endpoint ? How does that correlate with the "schemaLocations" that can be configured ?
Thanks and Regards, Michael 2014-06-30 12:15 GMT+02:00 Michael Täschner <[email protected]>: > Hi Freeman, > > do you have an example for referencing the catalog.xml via spring (or > blueprint) and how to map the namespaces to the local schema files ? > Is it used in combinations with the schemalocations property or > different approach ? > > Thanks and Regards, > Michael > > 2014-06-30 11:42 GMT+02:00 Freeman Fang <[email protected]>: >> 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 <[email protected]> >>> Date: 2014-06-27 14:35 GMT+02:00 >>> Subject: Re: camel-cxf proxy failed wsdl reading with local schemaLocations >>> To: [email protected] >>> >>> >>> 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 <[email protected]>: >>>> 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&interface=BasicHttpBinding_ISessionManager&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&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 >>
