public class JaxWsPortClientInterceptor extends LocalJaxWsServiceFactory implements MethodInterceptor, BeanClassLoaderAware, InitializingBean
MethodInterceptor
for accessing a
specific port of a JAX-WS service. Compatible with JAX-WS 2.1 and 2.2,
as included in JDK 6 update 4+ and Java 7/8.
Uses either LocalJaxWsServiceFactory
's facilities underneath,
or takes an explicit reference to an existing JAX-WS Service instance
(e.g. obtained via JndiObjectFactoryBean
).
setPortName(java.lang.String)
,
setServiceInterface(java.lang.Class<?>)
,
Service.getPort(javax.xml.namespace.QName, java.lang.Class<T>)
,
RemoteAccessException
,
JndiObjectFactoryBean
Constructor and Description |
---|
JaxWsPortClientInterceptor() |
Modifier and Type | Method and Description |
---|---|
void |
addCustomProperty(String name,
Object value)
Add a custom property to this JAX-WS BindingProvider.
|
void |
afterPropertiesSet()
Invoked by the containing
BeanFactory after it has set all bean properties
and satisfied BeanFactoryAware , ApplicationContextAware etc. |
protected void |
applyDefaultsFromAnnotation(WebService ann)
Initialize this client interceptor's properties from the given WebService annotation,
if necessary and possible (i.e.
|
protected Object |
doInvoke(MethodInvocation invocation)
Perform a JAX-WS service invocation based on the given method invocation.
|
protected Object |
doInvoke(MethodInvocation invocation,
Object portStub)
Perform a JAX-WS service invocation on the given port stub.
|
protected ClassLoader |
getBeanClassLoader()
Return the bean ClassLoader to use for this interceptor.
|
Map<String,Object> |
getCustomProperties()
Allow Map access to the custom properties to be set on the stub,
with the option to add or override specific entries.
|
String |
getEndpointAddress()
Return the endpoint address to specify on the stub.
|
Service |
getJaxWsService()
Return a reference to an existing JAX-WS Service instance, if any.
|
String |
getPassword()
Return the password to specify on the stub.
|
String |
getPortName()
Return the name of the port.
|
protected QName |
getPortQName()
Return the prepared QName for the port.
|
protected Object |
getPortStub()
Return the underlying JAX-WS port stub that this interceptor delegates to
for each method invocation on the proxy.
|
protected Object |
getPortStub(Service service,
QName portQName)
Obtain the port stub from the given JAX-WS Service.
|
Class<?> |
getServiceInterface()
Return the interface of the service that this factory should create a proxy for.
|
String |
getSoapActionUri()
Return the SOAP action URI to specify on the stub.
|
String |
getUsername()
Return the username to specify on the stub.
|
Object |
invoke(MethodInvocation invocation)
Implement this method to perform extra treatments before and
after the invocation.
|
boolean |
isMaintainSession()
Return the "session.maintain" flag to specify on the stub.
|
protected boolean |
isPrepared()
Return whether this client interceptor has already been prepared,
i.e.
|
boolean |
isUseSoapAction()
Return the "soapaction.use" flag to specify on the stub.
|
void |
prepare()
Initialize the JAX-WS port for this interceptor.
|
protected void |
preparePortStub(Object stub)
Prepare the given JAX-WS port stub, applying properties to it.
|
void |
setBeanClassLoader(ClassLoader classLoader)
Set the bean ClassLoader to use for this interceptor:
for resolving WebServiceFeature class names as specified through
setWebServiceFeatures(java.lang.Object[]) , and also for building a client
proxy in the JaxWsPortProxyFactoryBean subclass. |
void |
setCustomProperties(Map<String,Object> customProperties)
Set custom properties to be set on the stub.
|
void |
setEndpointAddress(String endpointAddress)
Set the endpoint address to specify on the stub.
|
void |
setJaxWsService(Service jaxWsService)
Set a reference to an existing JAX-WS Service instance,
for example obtained via
JndiObjectFactoryBean . |
void |
setLookupServiceOnStartup(boolean lookupServiceOnStartup)
Set whether to look up the JAX-WS service on startup.
|
void |
setMaintainSession(boolean maintainSession)
Set the "session.maintain" flag to specify on the stub.
|
void |
setPassword(String password)
Set the password to specify on the stub.
|
void |
setPortFeatures(WebServiceFeature... features)
Specify WebServiceFeature objects (e.g.
|
void |
setPortName(String portName)
Set the name of the port.
|
void |
setServiceInterface(Class<?> serviceInterface)
Set the interface of the service that this factory should create a proxy for.
|
void |
setSoapActionUri(String soapActionUri)
Set the SOAP action URI to specify on the stub.
|
void |
setUsername(String username)
Set the username to specify on the stub.
|
void |
setUseSoapAction(boolean useSoapAction)
Set the "soapaction.use" flag to specify on the stub.
|
void |
setWebServiceFeatures(Object[] webServiceFeatures)
Deprecated.
as of Spring 4.0, in favor of the differentiated
"serviceFeatures" and
"portFeatures" properties |
createJaxWsService, getNamespaceUri, getQName, getServiceName, getWsdlDocumentUrl, setExecutor, setHandlerResolver, setNamespaceUri, setServiceFeatures, setServiceName, setWsdlDocumentResource, setWsdlDocumentUrl
public void setJaxWsService(Service jaxWsService)
JndiObjectFactoryBean
.
If not set, LocalJaxWsServiceFactory
's properties have to be specified.public Service getJaxWsService()
public void setPortName(String portName)
public String getPortName()
public void setUsername(String username)
BindingProvider.USERNAME_PROPERTY
public String getUsername()
public void setPassword(String password)
BindingProvider.PASSWORD_PROPERTY
public String getPassword()
public void setEndpointAddress(String endpointAddress)
public String getEndpointAddress()
public void setMaintainSession(boolean maintainSession)
public boolean isMaintainSession()
public void setUseSoapAction(boolean useSoapAction)
BindingProvider.SOAPACTION_USE_PROPERTY
public boolean isUseSoapAction()
public void setSoapActionUri(String soapActionUri)
BindingProvider.SOAPACTION_URI_PROPERTY
public String getSoapActionUri()
public void setCustomProperties(Map<String,Object> customProperties)
Can be populated with a String "value" (parsed via PropertiesEditor) or a "props" element in XML bean definitions.
BindingProvider.getRequestContext()
public Map<String,Object> getCustomProperties()
Useful for specifying entries directly, for example via "customProperties[myKey]". This is particularly useful for adding or overriding entries in child bean definitions.
public void addCustomProperty(String name, Object value)
name
- the name of the attribute to exposevalue
- the attribute value to exposeBindingProvider.getRequestContext()
public void setPortFeatures(WebServiceFeature... features)
@Deprecated public void setWebServiceFeatures(Object[] webServiceFeatures)
"serviceFeatures"
and
"portFeatures"
propertiesWebServiceFeature
objects,
WebServiceFeature Class references, or WebServiceFeature class names.
As of Spring 4.0, this is effectively just an alternative way of
specifying "portFeatures"
. Do not specify
both properties at the same time; prefer "portFeatures" moving forward.
public void setServiceInterface(Class<?> serviceInterface)
public Class<?> getServiceInterface()
public void setLookupServiceOnStartup(boolean lookupServiceOnStartup)
Default is "true". Turn this flag off to allow for late start of the target server. In this case, the JAX-WS service will be lazily fetched on first access.
public void setBeanClassLoader(ClassLoader classLoader)
setWebServiceFeatures(java.lang.Object[])
, and also for building a client
proxy in the JaxWsPortProxyFactoryBean
subclass.setBeanClassLoader
in interface BeanClassLoaderAware
classLoader
- the owning class loader; may be null
in
which case a default ClassLoader
must be used, for example
the ClassLoader
obtained via
ClassUtils.getDefaultClassLoader()
protected ClassLoader getBeanClassLoader()
public void afterPropertiesSet()
InitializingBean
BeanFactory
after it has set all bean properties
and satisfied BeanFactoryAware
, ApplicationContextAware
etc.
This method allows the bean instance to perform validation of its overall configuration and final initialization when all bean properties have been set.
afterPropertiesSet
in interface InitializingBean
public void prepare()
protected void applyDefaultsFromAnnotation(WebService ann)
ann
- the WebService annotation found on the specified service interfaceprotected boolean isPrepared()
protected final QName getPortQName()
protected Object getPortStub(Service service, QName portQName)
service
- the Service object to obtain the port fromportQName
- the name of the desired port, if specifiedService.getPort(...)
protected void preparePortStub(Object stub)
prepare()
.stub
- the current JAX-WS port stubsetUsername(java.lang.String)
,
setPassword(java.lang.String)
,
setEndpointAddress(java.lang.String)
,
setMaintainSession(boolean)
,
setCustomProperties(java.util.Map<java.lang.String, java.lang.Object>)
protected Object getPortStub()
public Object invoke(MethodInvocation invocation) throws Throwable
MethodInterceptor
Joinpoint.proceed()
.invoke
in interface MethodInterceptor
invocation
- the method invocation joinpointJoinpoint.proceed()
;
might be intercepted by the interceptorThrowable
- if the interceptors or the target object
throws an exceptionprotected Object doInvoke(MethodInvocation invocation) throws Throwable
invocation
- the AOP method invocationThrowable
- in case of invocation failuregetPortStub()
,
doInvoke(org.aopalliance.intercept.MethodInvocation, Object)
protected Object doInvoke(MethodInvocation invocation, Object portStub) throws Throwable
invocation
- the AOP method invocationportStub
- the RMI port stub to invokeThrowable
- in case of invocation failuregetPortStub()