org.codehaus.enunciate.modules.xfire_client.EnunciatedSOAPWebServiceImpl Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of enunciate-xfire-client-rt
Show all versions of enunciate-xfire-client-rt
The Enunciate XFire Client runtime libraries support client-side service endpoint invocation via XFire.
/*
* Copyright 2006-2008 Web Cohesion
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.codehaus.enunciate.modules.xfire_client;
import org.codehaus.xfire.XFire;
import org.codehaus.xfire.XFireFactory;
import org.codehaus.xfire.soap.SoapConstants;
import org.codehaus.xfire.client.Client;
import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.client.XFireProxy;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.transport.TransportManager;
import org.codehaus.xfire.transport.Channel;
import org.codehaus.xfire.transport.http.SoapHttpTransport;
import org.codehaus.xfire.transport.http.HttpChannel;
import org.codehaus.xfire.transport.http.CommonsHttpMessageSender;
import org.apache.commons.httpclient.HttpState;
import java.lang.reflect.Proxy;
import java.util.Map;
/**
* A base class for client-side soap web service implementations.
*
* @author Ryan Heaton
*/
public abstract class EnunciatedSOAPWebServiceImpl {
private final Object proxy;
private final Client client;
/**
* Construct an enunciated SOAP web service that implements the specified interface.
*
* @param iface The interface.
* @param uuid The UUID of the interface.
* @param endpoint The endpoint URL of the SOAP port.
*/
protected EnunciatedSOAPWebServiceImpl(Class iface, String uuid, String endpoint) {
this.proxy = loadProxy(iface, uuid, endpoint);
XFireProxy xfireProxy = (XFireProxy) Proxy.getInvocationHandler(proxy);
this.client = xfireProxy.getClient();
setMTOMEnabled(true);
}
/**
* Load an XFire client proxy that implements the specified interface.
*
* @param iface The interface.
* @param uuid The UUID of the interface.
* @param endpoint The endpoint URL of the SOAP port.
* @return The proxy.
*/
protected final Object loadProxy(Class iface, String uuid, String endpoint) {
XFire xFire = XFireFactory.newInstance().getXFire();
TransportManager transportManager = xFire.getTransportManager();
Service service;
try {
ExplicitJAXWSAnnotationServiceFactory factory = new ExplicitJAXWSAnnotationServiceFactory(uuid, transportManager);
service = factory.create(iface);
}
catch (RuntimeException e) {
throw e;
}
catch (Exception e) {
throw new IllegalStateException(e);
}
SoapHttpTransport soapTransport = new SoapHttpTransport();
if (!soapTransport.isUriSupported(endpoint)) {
throw new IllegalArgumentException("Endpoint " + endpoint + " is not a supported SOAP endpoint.");
}
soapTransport.addOutHandler(new EnunciatedClientSoapSerializerHandler());
Client client = new Client(soapTransport, service, endpoint);
return new XFireProxyFactory(xFire).create(client);
}
/**
* The xfire proxy that will handle the web service calls on the client-side.
*
* @return The xfire proxy that will handle the web service calls on the client-side.
*/
public final Object getProxy() {
return proxy;
}
/**
* The xfire client object that backs this web service.
*
* @return The xfire client object that backs this web service.
*/
public final Client getXFireClient() {
return client;
}
/**
* Whether MTOM is enabled.
*
* @param MTOMEnabled Whether MTOM is enabled.
*/
public final void setMTOMEnabled(boolean MTOMEnabled) {
this.client.setProperty(SoapConstants.MTOM_ENABLED, String.valueOf(MTOMEnabled));
}
/**
* Sets the HTTP AUTH credentials for this service.
*
* @param username The username.
* @param password The password.
*/
public final void setHttpAuthCredentials(String username, String password) {
this.client.setProperty(Channel.USERNAME, username);
this.client.setProperty(Channel.PASSWORD, password);
}
/**
* Sets the http headers to use for this service.
*
* @param httpHeaders The http headers to use.
*/
public final void setHttpHeaders(Map httpHeaders) {
this.client.setProperty(EnunciatedHttpMessageSender.HTTP_HEADERS, httpHeaders);
}
/**
* Sets the request handler for this service.
*
* @param requestHandler The request handler.
*/
public final void setRequestHandler(RequestHandler requestHandler) {
this.client.setProperty(EnunciatedHttpMessageSender.REQUEST_HANDLER, requestHandler);
}
/**
* Gets the HTTP state for this service.
*
* @return The http state, or null if none has been set or created yet.
*/
public final HttpState getHttpState() {
try {
HttpChannel httpChannel = (HttpChannel) getXFireClient().getTransport().createChannel(getXFireClient().getEndpointUri());
return (HttpState) httpChannel.getProperty(CommonsHttpMessageSender.HTTP_STATE);
}
catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* Sets the HTTP state for this service.
*
* @param state The http state.
*/
public final void setHttpState(HttpState state) {
try {
HttpChannel httpChannel = (HttpChannel) getXFireClient().getTransport().createChannel(getXFireClient().getEndpointUri());
httpChannel.setProperty(CommonsHttpMessageSender.HTTP_STATE, state);
}
catch (Exception e) {
throw new RuntimeException(e);
}
}
}