tomee-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Anthony Fryer <apfr...@hotmail.com>
Subject WebServiceRef injection of CXF configured jax-ws client
Date Mon, 26 Aug 2013 13:22:24 GMT
I was wondering if it is possible to inject a cxf jax-ws client using the
@WebServiceRef annotation?  My scenario is that there is a web service that
is running in an external system that i want to call from a stateless ejb.  

I have run wsimport over the WSDL to generate the service
(@WebServiceClient) and port (@WebService) classes and packaged them up into
a jar file.

In my stateless ejb, i am using @WebServiceRef to inject a reference to the
generated service class.  This works ok if i want a standard reference
injected, but if i want to start configuring some things, like the endpoint
address or ws-security, i'm coding these things, which i don't want to do. 
I think there must be a way to configure cxf to do what i'm doing
programatically and have the @WebServiceRef inject a configured service
reference.


My ejb looks like this...

@Stateless
public class CreateLoyaltyAccountServiceImpl implements
CreateLoyaltyAccountService {
	
	@WebServiceRef
	@HandlerChain(file="/META-INF/web-service/virgin/client-handler-chain.xml")
	MemberProfileMediatorService memberProfileService;
	
	MemberProfileMediatorPpt memberProfilePort;
	
	@PostConstruct
	private void postConstruct() {
		memberProfilePort =
memberProfileService.getMemberProfileMediatorServicePort();
		Map<String, Object> ctx =
((BindingProvider)memberProfilePort).getRequestContext();
		ctx.put("ws-security.username", "fffff");
		ctx.put("ws-security.password", "*****");
	}
}

You can see above i'm using postConstruct to do configure the ws-security of
the webservice interface.  Is it possible to have a cxf config file to do
this?  Something similar to below (with more properties than what i have
below to configure security and other things)...

<?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:jaxws="http://cxf.apache.org/jaxws"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
       http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
    
    <jaxws:client id="memberProfileService"
serviceClass="MemberProfileMediatorService"
                 
address="http://localhost:8080/MemberProfileMediatorService"
name="memberProfileService"/>
                  
</beans>

One other minor thing that i have noticed while unit testing in openejb, i
have to specify the openejb.embedded.remotable = true property for
@WebServiceRef to work, even though i'm not actually hosting any service
implementations, only the client references.  Why is it necessary to enable
remotable in this case?  I think it is initializing cxf perhaps?



--
View this message in context: http://openejb.979440.n4.nabble.com/WebServiceRef-injection-of-CXF-configured-jax-ws-client-tp4664824.html
Sent from the OpenEJB User mailing list archive at Nabble.com.

Mime
View raw message