Glad we could help you.
Rodrigo's packaging is much more professional than mine (a quick hack at best). You just need to download his class and stick it somewhere in the classpath.
He also submitted an enhancement request for this.
About WSDD for clients :
It usually lives in axis.jar (package org.apache.axis.client) and it is the recommended way to configure transports and proxy parameters (axis2 has more options) for clients.
Folks usually take the standard wsdd out of the jar and make sure it appears before the bundled one in the classpath. Axis 1.3 is OK for what you want to do.
Regards,
Alain
-----Original Message-----
From: Carsten Schmidt [mailto:[EMAIL PROTECTED]]
Sent: 17 May 2006 10:49
To: [email protected]
Subject: Re: Select the output-network-interface to call an axis-webservice
Hi Alain,
Hi Rodrigo,
that's great! Your solution-samples are looking incredible. I hope, I'll
find time to realise it the next days.
I'm just a bit confused about the client-config.wsdd-file because I
don't have such a file right now.
Sure I know the server-config.wsdd, but a clientprogram will not be
deployed, or will it?
And if the program never used this wsdd before, how can I tell it to do
so?
My experiences with axis are quite simple yet, so I am not sure I
haven't overlooked something important about this.
BTW: At the moment I'm using libraries from axis 1.3 (Download archive
from october 05).
Anyway, let me tell you I really appreciate to your support so far.
Carsten
Am Dienstag, den 16.05.2006, 16:47 +0200 schrieb Rodrigo Ruiz:
> CommonsHTTPSender is easier to subclass and modify. I pass you a
> simple
> subclass that could do the trick :-)
>
> HTH,
> Rodrigo
>
>
>
> package org.rodrisoft;
>
> import java.io.FileInputStream;
> import java.io.InputStream;
> import java.net.InetAddress;
> import java.net.URL;
> import java.util.HashMap;
> import java.util.Hashtable;
> import java.util.Iterator;
> import java.util.Map;
> import java.util.Properties;
>
> import org.apache.axis.MessageContext;
> import org.apache.axis.transport.http.CommonsHTTPSender;
> import org.apache.commons.httpclient.HostConfiguration;
> import org.apache.commons.httpclient.HttpClient;
>
> /**
> * Sender implementation that uses Jakarta Commons HTTP for
> transmission, and
> * implements a routing map table to select a local address
> depending
> on the
> * remote address to connect to.
> * <p>
> * This sender can be configured in the client-config.wsdd file like
> this:
> * <pre>
> * <transport name="http"
> * pivot="java:org.rodrisoft.RoutedCommonsHTTPSender">
> * <parameter name="map-file"
> value="path/to/map/file.properties"/>
> * <parameter name="map:remote-addr" value="10.33.5.67"/>
> * </transport>
> * </pre>
> * <p>
> * The first parameter specifies a .properties file containing pairs
> in
> * the form:
> *
> * <pre>
> * remote-addr=remote-addr
> * </pre>
> *
> * The second parameter is an example of how to specify a single
> route
> * table entry directly in the .wsdd file.
> * <p>
> * The first parameter allows to share the route table among several
> * protocols.
> * <p>
> * The local binding address can also be specified through the
> message
> * context. This allows services and handlers set the local address,
> and
> * provide smarter routing algorithms.
> * <p>
> * Original work from Davanum Srinivas.
> *
> * @author Davanum Srinivas ([EMAIL PROTECTED])
> * @author Rodrigo Ruiz ([EMAIL PROTECTED])
> * @version 1.0
> */
> public class RoutedCommonsHTTPSender extends CommonsHTTPSender {
>
> /**
> * <code>serialVersionUID</code> attribute.
> */
> private static final long serialVersionUID = -8610352356067978620L;
>
> /**
> * MessageContext Property name for setting the local bind
> address.
> */
> public static final String LOCAL_BIND_ADDRESS =
> "local.bind.address";
>
> /**
> * Local Bind Address Route Map.
> */
> private final Map routeTable = new HashMap();
>
> /**
> * Flag that controls bindMap synchronization.
> */
> private boolean dirty = true;
>
> public synchronized void setOption(String name, Object value) {
> this.dirty = true;
> super.setOption(name, value);
> }
>
> public synchronized boolean setOptionDefault(String name,
> Object value) {
> this.dirty = true;
> return super.setOptionDefault(name, value);
> }
>
> public synchronized void setOptions(Hashtable options) {
> this.dirty = true;
> super.setOptions(options);
> }
>
> protected HostConfiguration getHostConfiguration(HttpClient
> client,
> MessageContext context, URL targetURL) {
>
> HostConfiguration config = super.getHostConfiguration(client,
> context,
> targetURL);
>
> if (targetURL != null) {
> String remoteHost = targetURL.getHost();
> InetAddress localAddr = getRouteFor(context, remoteHost);
> if (localAddr != null) {
> config.setLocalAddress(localAddr);
> }
> }
>
> return config;
> }
>
> /**
> * This utility method allows to force the route table to be
> rebuilt.
> * It can be useful if the route table file is modified, and we
> can
> * manage to get the instance of this handler.
> */
> public void rebuildTable() {
> this.dirty = true;
> }
>
> /**
> * Gets a route for the specified remote address, allowing it to
> be
> * specified through a Message Context parameter.
> *
> * @param ctx The message context
> * @param host The remote host to map
> * @return The mapped address, or null if none found
> */
> protected InetAddress getRouteFor(MessageContext ctx, String host)
> {
> Object value = ctx.getProperty(LOCAL_BIND_ADDRESS);
> if (value instanceof InetAddress) {
> return (InetAddress)value;
> }
>
> if (value != null) {
> String hostName = value.toString();
> try {
> return InetAddress.getByName(hostName);
> } catch (Exception e) {
> log.error("Could not resolve local bind address " +
> hostName);
> }
> }
>
> // No value defined in the MessageContext. Use route map.
>
> value = getRouteTable().get(host);
> if (value instanceof InetAddress) {
> return (InetAddress)value;
> }
>
> if (value != null) {
> String hostName = value.toString();
> try {
> return InetAddress.getByName(hostName);
> } catch (Exception e) {
> log.error("Could not resolve local bind address " +
> hostName);
> }
> }
>
> return null;
> }
>
> /**
> * Gets the route mapping table.
> *
> * @return The route mapping table
> */
> protected synchronized Map getRouteTable() {
> if (dirty) {
> routeTable.clear();
>
> Hashtable options = getOptions();
> String mapFile = (String)options.get("map-file");
> if (mapFile != null) {
> InputStream is = null;
> try {
> is = new FileInputStream(mapFile);
> Properties props = new Properties();
> props.load(is);
> options.putAll(props);
> } catch (Exception e) {
> log.error("Could not load route mapping table at " +
> mapFile);
> }
> }
>
> for (Iterator it = options.entrySet().iterator();
> it.hasNext();) {
> Map.Entry entry = (Map.Entry)it.next();
> Object key = entry.getKey();
> if (key instanceof String) {
> String skey = (String)key;
> if (skey.startsWith("map:")) {
> String remoteHost = skey.substring(4).trim();
> String localHost = ((String)entry.getValue()).trim();
> try {
> InetAddress localAddr =
> InetAddress.getByName(localHost);
> routeTable.put(remoteHost, localAddr);
> } catch (Exception e) {
> log.warn("Could not resolve local bind address "
> + localHost, e);
> routeTable.put(remoteHost, localHost);
> }
> }
> }
> }
> dirty = false;
> }
>
> return routeTable;
> }
> }
>
>
>
> --
> -------------------------------------------------------------------
> GRIDSYSTEMS Rodrigo Ruiz Aguayo
> Parc Bit - Son Espanyol
> 07120 Palma de Mallorca mailto:[EMAIL PROTECTED]
> Baleares - EspaƱa Tel:+34-971435085 Fax:+34-971435082
> http://www.gridsystems.com
> -------------------------------------------------------------------
>
>
> --
> No virus found in this outgoing message.
> Checked by AVG Free Edition.
> Version: 7.1.392 / Virus Database: 268.5.6/339 - Release Date:
> 14/05/2006
>
>
