I implemented the below logic to see if it works in CXF. I started both campaign and profile services and was able to access the WSDL. But, the client failed in error when invoking the profile service. I suspect if the profile service within campaign service is not injected by CXF. I get a 500 response on the server when I run the client. Can someone shed some light on this? I am using CXF 2.1.

*I am getting the following message when I start my web services.*

FINE: Wrigin XML Schema for [EMAIL PROTECTED]://testing.services.fluximpl/[EMAIL PROTECTED]
com.sun.xml.bind.v2.util.StackRecorder
at com.sun.xml.bind.v2.schemagen.XmlSchemaGenerator.write(XmlSchemaGenerator.java:422) at com.sun.xml.bind.v2.runtime.JAXBContextImpl.generateSchema(JAXBContextImpl.java:788) at org.apache.cxf.jaxb.JAXBDataBinding.generateJaxbSchemas(JAXBDataBinding.java:384) at org.apache.cxf.jaxb.JAXBDataBinding.initialize(JAXBDataBinding.java:337) at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.buildServiceFromClass(ReflectionServiceFactoryBean.java:343) at org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.buildServiceFromClass(JaxWsServiceFactoryBean.java:512) at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initializeServiceModel(ReflectionServiceFactoryBean.java:394) at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.create(ReflectionServiceFactoryBean.java:180) at org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.create(JaxWsServiceFactoryBean.java:163) at org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(AbstractWSDLBasedEndpointFactory.java:79) at org.apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.java:114) at org.apache.cxf.jaxws.JaxWsServerFactoryBean.create(JaxWsServerFactoryBean.java:160)
   at fluximpl.services.testing.CXFServer.main(CXFServer.java:32)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
   at java.lang.reflect.Method.invoke(Method.java:585)
   at com.intellij.rt.execution.application.AppMain.main(AppMain.java:90)
May 2, 2008 11:55:18 AM org.apache.cxf.configuration.spring.ConfigurerImpl configureBean FINE: Could not find a definition for bean with id {http://testing.services.fluximpl/}CampaignManagerPort.http-destination - no injection will be performed.
May 2, 2008 11:55:18 AM org.apache.cxf.endpoint.ServerImpl initDestination
INFO: Setting the server's publish address to be http://localhost:8080/campaignservice

*I am getting the following error on the server side when I invoke the profile service.*

FINE: Application has thrown exception, unwinding now
org.apache.cxf.interceptor.Fault
at org.apache.cxf.service.invoker.AbstractInvoker.createFault(AbstractInvoker.java:110) at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:98) at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:68) at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:56) at org.apache.cxf.workqueue.SynchronousExecutor.execute(SynchronousExecutor.java:37) at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:92) at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:221) at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:78) at org.apache.cxf.transport.http_jetty.JettyHTTPDestination.serviceRequest(JettyHTTPDestination.java:280) at org.apache.cxf.transport.http_jetty.JettyHTTPDestination.doService(JettyHTTPDestination.java:254) at org.apache.cxf.transport.http_jetty.JettyHTTPHandler.handle(JettyHTTPHandler.java:70) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:726) at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:206) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
   at org.mortbay.jetty.Server.handle(Server.java:320)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505) at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:842)
   at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:730)
   at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
   at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395) at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:450)
Caused by: java.lang.NullPointerException
at fluximpl.services.testing.RemoteProfileManagerImpl.getUsername(RemoteProfileManagerImpl.java:20)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
   at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:127) at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:82)
   ... 20 more

*FINE: RESPONSE /profileservice  500*
May 2, 2008 12:25:24 PM sun.reflect.NativeMethodAccessorImpl invoke0
FINE: EXCEPTION
java.io.IOException: An existing connection was forcibly closed by the remote host
   at sun.nio.ch.SocketDispatcher.read0(Native Method)
   at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:25)
   at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:233)
   at sun.nio.ch.IOUtil.read(IOUtil.java:206)
   at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:207)
   at org.mortbay.io.nio.ChannelEndPoint.fill(ChannelEndPoint.java:128)
   at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:282)
   at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:205)
   at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395) at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:450)
May 2, 2008 12:12:32 PM sun.reflect.GeneratedMethodAccessor3 invoke
FINE: EOF

*On the Client side, I see the following error:*

May 2, 2008 12:12:30 PM org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromClass INFO: Creating Service ProfileService from class fluximpl.services.testing.ProfileManager Exception in thread "main" javax.xml.ws.soap.SOAPFaultException: Fault occurred while processing. at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:218)
   at $Proxy28.getUsername(Unknown Source)
   at fluximpl.services.testing.CXFClient.getUsername(CXFClient.java:69)
   at fluximpl.services.testing.TestClient.main(TestClient.java:13)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
   at java.lang.reflect.Method.invoke(Method.java:585)
   at com.intellij.rt.execution.application.AppMain.main(AppMain.java:90)
Caused by: org.apache.cxf.binding.soap.SoapFault: Fault occurred while processing. at org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.java:70) at org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.java:35) at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:221) at org.apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage(AbstractFaultChainInitiatorObserver.java:96) at org.apache.cxf.binding.soap.interceptor.CheckFaultInterceptor.handleMessage(CheckFaultInterceptor.java:65) at org.apache.cxf.binding.soap.interceptor.CheckFaultInterceptor.handleMessage(CheckFaultInterceptor.java:34) at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:221)
   at org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:429)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1988) at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1824) at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:66)
   at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:583)
at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62) at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:221)
   at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:276)
   at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:222)
   at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73)
at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:177)
   ... 8 more

Thank you,
Arul

Arul Dhesiaseelan wrote:
Hi,

I have the following scenario. ProfileManager is a web service contained within CampaignManager web service. I can access the profile manager only through campaign manager.

@WebService
public class CampaignManagerImpl implements CampaignManager {
private String name;
private ProfileManager profileMgr;

@WebMethod
public String getName() {
 return name;
}

@WebMethod
public ProfileManager getProfileManager() {
   if (profileMgr != null)
       profileMgr  = new ProfileManagerImpl();
    return profileMgr;
}

}


@WebService
public class ProfileManagerImpl implements ProfileManager {
private String username;
private String password;
private ProfileManager manager;

public ProfileManagerImpl(ProfileManager mgr) {
   this.manager = mgr;
}
@WebMethod
public String getUsername() {
   return mgr.getUsername();
}

@WebMethod
public String getPassword() {
    return mgr.getPassword();
}
}

When I actually create the campaign service, I am thinking to do something like this:.

   JaxWsServerFactoryBean sf = new JaxWsServerFactoryBean();
   sf.setServiceClass(CampaignManager.class);
   sf.getServiceFactory().setWrapped(true);
   sf.setServiceName(new QName(NAMESPACE_URI, localPart, ""));
   sf.setAddress("http://localhost:8080/campaignservice";);

   CampaignManager campaignService = new CampaignManagerImpl();
ProfileManager profileService = new ProfileManagerImpl(campaignService.getProfileManager());//getting the profile mgr from campaign mgr and creating the profile mgr service.
   sf.getServiceFactory().setInvoker(new BeanInvoker(campaignService));
   sf.create();

How do I invoke these services from the CXF client? Is it a valid use case that can be implemented in CXF?

Cheers,
Arul


________________________________
Scanned by MessageLabs for Flux
________________________________

Reply via email to