Hi,
oh, maybe we missunderstood each other.
There is no problem with the IP the service is running on.
On another machine a servlet is calling this service. For this call I
have to determine a special outgoing-IP, because it is a webserver on
which each webapp has it's own virtual-IP.
Only the IP from the app has the necessary permissions to pass the
firewall correctly.
By default the axis-call doesn't use the virtual-IP from the
webapp-context, but the IP from the server itself.
In detail:
Webserver with the IP 10.33.5.1
Virtual IP for the webapp 10.33.5.67
Carsten
Am Dienstag, den 16.05.2006, 09:47 +0200 schrieb Rodrigo Ruiz:
> Ok,
>
> If you look at the very first example in the users guide:
>
> 1 import org.apache.axis.client.Call;
> 2 import org.apache.axis.client.Service;
> 3 import javax.xml.namespace.QName;
> 4
> 5 public class TestClient {
> 6 public static void main(String [] args) {
> 7 try {
> 8 String endpoint =
> 9 "http://ws.apache.org:5049/axis/services/echo";
> 10
> 11 Service service = new Service();
> 12 Call call = (Call) service.createCall();
> 13
> 14 call.setTargetEndpointAddress( new
> java.net.URL(endpoint) );
> 15 call.setOperationName(new QName("http://soapinterop.org/",
> echoString"));
> 16
> 17 String ret = (String) call.invoke( new Object[]
> { "Hello!" } );
> 18
> 19 System.out.println("Sent 'Hello!', got '" + ret + "'");
> 20 } catch (Exception e) {
> 21 System.err.println(e.toString());
> 22 }
> 23 }
> 24 }
>
> You can see that the service endpoint is a URL declared at lines
> 8-9.
> You simply have to build this URL using the host you have read from
> your
> configuration file.
>
>
> If you are working with generated stubs, you will find that your
> Service
> class has at least two get<PortName>() methods (more if you use a
> WS-Addressing aware generator).
>
> One of these methods gets a URL instance as a parameter. This URL
> must
> contain the endpoint URL, that is, the same URL you would use in the
> example above. Therefore, you can again build this URL using your
> configured host name.
>
> You may allow configuring only a part of your endpoints, like in:
>
> String hostName = myProps.getProperty("hostName");
> URL url = new URL("http://" + hostName + "/axis/services/echo");
>
> or you may get the full endpoint URL from your configuration file,
> like:
>
> String echoEndpoint = myProps.getProperty("Endpoint.Echo");
> URL url = new URL(echoEndpoint);
>
> I personally think the second option gives you more freedom to
> change
> your server deployment at will.
>
> HTH,
> Rodrigo
>
>
> Carsten Schmidt wrote:
> > Hi Rodrigo,
> > these ideas are very interesting.
> >
> > First of all, thanks a lot for that.
> >
> > But for the first way of making the host address configurable, I
> still
> > have to ask you, how to do that in detail?
> >
> > I don't mean how to read the address from a properties file, but how
> can
> > I set the value?
> >
> > Carsten
> >
> >
> > Am Montag, den 15.05.2006, 17:28 +0200 schrieb Rodrigo Ruiz:
> >> Carsten,
> >>
> >> In fact, there are several ways to handle your situation, but I
> >> guess
> >> almost none of them is as simple as adding some lines to your
> client
> >> code. The ones I know are:
> >>
> >> - Make the host address configurable. That is, read the host
> address
> >> from a configuration file. I know this is not what you are asking
> >> for,
> >> but it is probably the only easy workaround to your problem. In
> fact,
> >> I
> >> think it will be the only one that will work if you want to test
> >> your
> >> client application from the same host, and manually select the
> >> adapter
> >> to use.
> >>
> >> - You may use DNS to provide a common name to your server, and
> access
> >> it
> >> through host name, instead of host address. This probably means
> some
> >> work to get your client domain name, in order to build the
> complete
> >> host
> >> name in each subnetwork, or be sure that using the host name
> without
> >> a
> >> domain name will return you the correct host address in all cases.
> >>
> >> - In a more complicated fashion, you could decide to convert
> your
> >> service in a "standard" service, and register it into your DNS
> >> servers.
> >> DNS protocol allows to register the addresses for "standard"
> >> services,
> >> providing a simplistic discovery service, and allowing you to ask
> for
> >> a
> >> service name, instead of a host name. AFAIK, this option is not
> >> usual,
> >> but it should work. I am not sure, but you may probably need to
> use
> >> Jakarta commons-net library to perform such kind of queries to
> your
> >> DNS
> >> server.
> >>
> >> - You can delegate the problem to a well-known UDDI server.
> Anyway,
> >> if
> >> you use TCP/IP, this will just move your problem from one host
> to
> >> another, as this UDDI server/s will probably also have different
> >> addresses in each sub-network.
> >>
> >> - You might use some UDP based discovery service. The idea in this
> >> case
> >> would be to send a broadcast message, and receive the
> appropriate
> >> address from some arbitrary point on your network. If you
> implement
> >> such
> >> a service in your own server, you will probably be able to get the
> >> host
> >> address from the response message meta-data itself. There are
> some
> >> standard libraries for achieving this out there, or you could try
> to
> >> implement your own, as it is plenty of examples on Google ;-)
> >>
> >> Hope this helps,
> >> Rodrigo
> >>
> >>
> >> Carsten Schmidt wrote:
> >>> Hi Alain,
> >>> thanks for your answer, but it seems as if the
> >> NetworkInterface-class
> >>> would just be able to give you information about the interfaces.
> >>>
> >>> For me, it is important to tell the program which Interface to
> use,
> >>> because the webserver I'm working on got different IP's in
> >> different
> >>> sub-networks.
> >>>
> >>> So, I am looking for a method like setHostAdress(foo). Maybe this
> >> is
> >>> more a part of java than axis, but the Axis-Call-class seems to
> >> handle
> >>> the whole hardware/network-stuff on it's own.
> >>>
> >>> I can't believe that there is no smart way to handle this.
> >>>
> >>> Carsten
> >>>
> >>>
> >>> Am Montag, den 15.05.2006, 16:28 +0200 schrieb Pannetier Alain:
> >>>> Hi Carsten,
> >>>>
> >>>> Here is an example I use to know whether I'm in the office or
> at
> >>>> home :
> >>>>
> >>>> try {
> >>>> Enumeration myInterfaces =
> >>>> NetworkInterface.getNetworkInterfaces();
> >>>> interfaceEnum:
> >>>> while ( myInterfaces.hasMoreElements()) {
> >>>> NetworkInterface netInterf = (NetworkInterface)
> >>>> myInterfaces.nextElement();
> >>>> Enumeration addresses =
> netInterf.getInetAddresses() ;
> >>>> while (addresses.hasMoreElements()) {
> >>>> InetAddress address = (InetAddress)
> >>>> addresses.nextElement();
> >>>> if
> >>>> ( address.getHostAddress().startsWith( OFFICE_PREFIX ) ) {
> >>>> isAtTheOffice = true ;
> >>>> break interfaceEnum ;
> >>>> }
> >>>> }
> >>>> }
> >>>> } catch (SocketException e) {
> >>>> e.printStackTrace();
> >>>> }
> >>>> ...
> >>>>
> >>>> It shows how to loop on all your interfaces and select one
> >> (according
> >>>> to its address prefix...).
> >>>>
> >>>> That's probably close to what your're after.
> >>>>
> >>>> Alain
> >>>>
> >>>>
> >>>> -----Original Message-----
> >>>> From: Schmidt, Carsten -81.01-
> >> [mailto:[EMAIL PROTECTED]
> >>>> Sent: 15 May 2006 16:17
> >>>> To: [email protected]
> >>>> Subject: RE: Select the output-network-interface to call an
> >>>> axis-webservice
> >>>>
> >>>> Hi,
> >>>> did really no one every had a problem like that?
> >>>> This problem can not be so special, can it?
> >>>>
> >>>> But maybe you know another mailinglist or a book, which might be
> >> able
> >>>> to help me?
> >>>>
> >>>> It is really important for me to find a solution for that, and
> >>>> meanwhile I ain't got no more idea where to look at.
> >>>>
> >>>> Regards,
> >>>>
> >>>> Carsten
> >>>>
> >>>>>
> >>>>> Hi everybody,
> >>>>> maybe this question has already been answered a thousend times,
> >> but
> >>>> I
> >>>>> haven't found anything about it.
> >>>>> I got a server with a few different network adapters. Each of
> >> them
> >>>> with
> >>>>> a different IP. Now I'm searching for a way to call a
> webservice
> >> by
> >>>>> choosing exacly one of those adapters (which is not the
> default
> >>>> one).
> >>>>>
> >>>>> How can I do than?
> >>>>>
> >>>>> java.net.NetworkInterface shows me what is available, but where
> >> can
> >>>> it
> >>>>> set what to use? org.apache.axis.client.Call?
> >>>>> org.apache.axis.client.Service?
> >>>>>
> >>>>> Can anybody help me?
> >>>>>
> >>>>> Carsten
> >>>>
> >>>>
> >>>
> >>>
> >>>
> >> --
> >>
> -------------------------------------------------------------------
> >> 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
> >>
> >>
> >
> >
> >
>
> --
> -------------------------------------------------------------------
> 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
>
>