In my 'web.xml' I load services related configuration with:
<servlet>
<servlet-name>CXFServlet</servlet-name>
<display-name>CXF Servlet</display-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<init-param>
<param-name>config-location</param-name>
<param-value>/WEB-INF/services-server.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
If i remove those lines from 'services-server.xml', then imports looks
like useless:
> <cxf:bus>
> <cxf:features>
> <cxf:logging/>
> </cxf:features>
> </cxf:bus>
For info, here is the beginning of 'services-server.xml' file:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:simple="http://cxf.apache.org/simple"
xmlns:soap="http://cxf.apache.org/bindings/soap"
xmlns:cxf="http://cxf.apache.org/core"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://cxf.apache.org/bindings/soap
http://cxf.apache.org/schemas/configuration/soap.xsd
http://cxf.apache.org/simple http://cxf.apache.org/schemas/simple.xsd
http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
"
default-autowire="byName">
Looking at Tomcat starting I can read:
09:31:10,191 INFO [BusApplicationContext] No cxf.xml configuration file
detected, relying on defaults.
09:31:10,191 DEBUG [BusApplicationContext] Creating application context
with resources: [class path resource [META-INF/cxf/cxf.xml], class path
resource [META-INF/cxf/cxf-extension-corba.xml], class path resource
[META-INF/cxf/cxf-extension-jaxws.xml], ...
So I guess there is a fallback that workaround the missing 'cxf.xml' and
related files.
The problem is I cannot configure <cxf:bus> since adding imports is
breaking (without error) the WS deployment.
Regards.
Johann
On Mon, Oct 5, 2009 at 8:42 PM, Daniel Kulp <[email protected]
<mailto:[email protected]>> wrote:
I guess it kind of depends on how this config is picked up...
Is this a cxf-servlet.xml thing that the CXFServlet is loading (in
which case
you shouldn't have the imports as your config is loaded on top of the
"Default" bus configs) or is this a applicationContext.xml type
thing that
the sping context listener is picking up (in which case it IS needed)?
Dan
On Mon October 5 2009 4:37:25 am Spam wrote:
> Hi All,
>
> I answer by myself.
>
> Even if I don't really know why, removing following lines from my
> services configuration is fixing the issue (services are visible
and are
> running perfectly):
>
> <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:bus>
> <cxf:features>
> <cxf:logging/>
> </cxf:features>
> </cxf:bus>
>
> Any idea why these lines are preventing web services to be usable
while
> no error message is issued?
>
> Regards.
> Johann
>
> Spam a écrit :
> > Hi All,
> >
> > I've followed the guidelines from
> > "http://cwiki.apache.org/CXF20DOC/jax-ws-configuration.html" to
> > configure my web services inside Tomcat 6.0.
> >
> > If I use the following configuration, everything in the cxf
(log4j) log
> > file looks like the services are deployed successfully, but checking
> > with "http://localhost:8080/myWebApp/services/" results in "No
services
> > have been found.".
> >
> > <bean id="WSUserServicePortType"
> > class="be.eft.cbkv3.ws.WSUserServicePortTypeImpl">
> > </bean>
> > <jaxws:endpoint id="WSUserServicePortTypeEndpoint"
> > implementor="#WSUserServicePortType"
> > address="/WS_UserService.srv">
> > <jaxws:binding>
> > <soap:soapBinding mtomEnabled="true"
version="1.2"/>
> > </jaxws:binding>
> > </jaxws:endpoint>
> >
> > <bean id="WSClaimServicePortType"
> > class="be.eft.cbkv3.ws.WSClaimServicePortTypeImpl">
> > </bean>
> > <jaxws:endpoint id="WSClaimServicePortTypeEndpoint"
> > implementor="#WSClaimServicePortType"
> > address="/WS_ClaimService.srv">
> > <jaxws:binding>
> > <soap:soapBinding mtomEnabled="true"
version="1.2"/>
> > </jaxws:binding>
> > </jaxws:endpoint>
> >
> > I changed configuration in that way (not using implementor but
> > implementorClass only):
> > <jaxws:endpoint id="WSUserServicePortTypeEndpoint"
> >
> > implementorClass="be.eft.cbkv3.ws.WSUserServicePortTypeImpl"
> > address="/WS_UserService.srv">
> > <jaxws:binding>
> > <soap:soapBinding mtomEnabled="true"
version="1.2"/>
> > </jaxws:binding>
> > </jaxws:endpoint>
> >
> > <jaxws:endpoint id="WSClaimServicePortTypeEndpoint"
> >
> > implementorClass="be.eft.cbkv3.ws.WSClaimServicePortTypeImpl"
> > address="/WS_ClaimService.srv">
> > <jaxws:binding>
> > <soap:soapBinding mtomEnabled="true"
version="1.2"/>
> > </jaxws:binding>
> > </jaxws:endpoint>
> > Then I get on "http://localhost:8080/myWebApp/services/" (looks
good,
> > isn't it?):
> > Available SOAP services:
> > WSClaimServicePortType
> > * getClaim
> > * identify
> >
> > WSUserServicePortType
> > * openSession
> > * identify
> > * closeSession
> > But when I try to use the Web Services by running the WS
consumers, I
> > get this error (in tomcat log):
> > 02 Oct 2009 at 18.06.57,929 WARN
> >
(SessionId=,org.apache.cxf.common.logging.LogUtils,345,http-8080-1) []
> > Application has thrown exception, unwinding now
> > org.apache.cxf.interceptor.Fault: object is not an instance of
declaring
> > class while invoking public java.lang.String
> >
myPackage.ws.WSUserServicePortTypeImpl.openSession(java.lang.String,java.
> >lang.String,java.lang.Short,java.lang.String) throws
> > myPackage.ws.LoginException_Exception with params [login,
password, 0,
> > localhost].
> > at
> >
org.apache.cxf.service.invoker.AbstractInvoker.createFault(AbstractInvoke
> >r.java:152) at
> >
org.apache.cxf.jaxws.AbstractJAXWSMethodInvoker.createFault(AbstractJAXWS
> >MethodInvoker.java:83) at
> >
org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.jav
> >a:126) at
> >
org.apache.cxf.jaxws.JAXWSMethodInvoker.invoke(JAXWSMethodInvoker.java:55
> >) at
> >
org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.jav
> >a:68) at
> >
org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvoker
> >Interceptor.java:58) at
> >
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
> > at
java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
> > at java.util.concurrent.FutureTask.run(FutureTask.java:138)
> > at
> >
org.apache.cxf.workqueue.SynchronousExecutor.execute(SynchronousExecutor.
> >java:37) at
> >
org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(Servic
> >eInvokerInterceptor.java:98) at
> >
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorCh
> >ain.java:236) at
> >
org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiatio
> >nObserver.java:104) at
> >
org.apache.cxf.transport.servlet.ServletDestination.invoke(ServletDestina
> >tion.java:99) at
> >
org.apache.cxf.transport.servlet.ServletController.invokeDestination(Serv
> >letController.java:452) at
> >
org.apache.cxf.transport.servlet.ServletController.invoke(ServletControll
> >er.java:196) at
> >
org.apache.cxf.transport.servlet.AbstractCXFServlet.invoke(AbstractCXFSer
> >vlet.java:220) at
> >
org.apache.cxf.transport.servlet.AbstractCXFServlet.doPost(AbstractCXFSer
> >vlet.java:153) at
> > javax.servlet.http.HttpServlet.service(HttpServlet.java:637) at
> >
org.apache.cxf.transport.servlet.AbstractCXFServlet.service(AbstractCXFSe
> >rvlet.java:211) at
> >
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applicat
> >ionFilterChain.java:290) at
> >
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilte
> >rChain.java:206) at
> >
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve
> >.java:233) at
> >
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve
> >.java:191) at
> >
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:
> >128) at
> >
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:
> >102) at
> >
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.j
> >ava:109) at
> >
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:28
> >6) at
> >
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845
> >) at
> >
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(H
> >ttp11Protocol.java:583) at
> >
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
> > at java.lang.Thread.run(Thread.java:619)
> > Caused by: java.lang.IllegalArgumentException: object is not an
instance
> > of declaring class
> > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> > at
> >
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java
> >:39) at
> >
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorI
> >mpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597)
> > at
> >
org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(Abstract
> >Invoker.java:166) at
> >
org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.jav
> >a:82) ... 29 more
> >
> > I wonder what is wrong in my configuration?
> >
> > I've tested using "jaxws:server" and I have same issue: the web
services
> > looks like deployed in the log but access to
> > "http://localhost:8080/myWebApp/services/" results in "No
services have
> > been found.".
> >
> > By the way, my tests based on Simple Frontend are working well:
> >
> > <simple:server id="cxf.wsUserService"
> > serviceClass="myPackage.ws.interfaces.WSUserService"
> > address="/WS_UserService.srv">
> > <simple:serviceBean>
> > <bean id="server.wsUserService"
> > class="myPackage.ws.impl.WSUserServiceImpl">
> > <property name="businessFacade" ref="businessFacade"/>
> > </bean>
> > </simple:serviceBean>
> > </simple:server>
> >
> > <simple:server id="cxf.wsClaimService"
> > serviceClass="myPackage.ws.interfaces.WSClaimService"
> > address="/WS_ClaimService.srv">
> > <simple:serviceBean>
> > <bean id="server.wsClaimService"
> > class="myPackage.ws.impl.WSClaimServiceImpl">
> > <property name="businessFacade" ref="businessFacade"/>
> > </bean>
> > </simple:serviceBean>
> > </simple:server>
> >
> > Any help would be greatly appreciated.
> >
> > Regards.
> > Johann
>
--
Daniel Kulp
[email protected] <mailto:[email protected]>
http://www.dankulp.com/blog