users@jax-rpc.java.net

RE: HTTP transport error: java.net.UnknownHostException

From: Potter, Brian L <brian.potter_at_intergraph.com>
Date: Fri, 1 Oct 2004 13:56:53 -0500

come to think of it, it worked using jwsdp 1.3. we never deployed under
jwsdp 1.4, although it did work on my dev machines. so maybe it's a j2ee
problem?

-----Original Message-----
From: kathy walsh [mailto:Kathleen.Walsh_at_Sun.COM]
Sent: Friday, October 01, 2004 1:17 PM
To: users_at_jax-rpc.dev.java.net
Subject: Re: HTTP transport error: java.net.UnknownHostException


Brian-
what I mean is jaxrpc that ships with the jwsdp1.4-
thanks,
Kathy

Potter, Brian L wrote:

thanks for the quick reply. by standalone jaxrpc, do you mean the
dynamicproxy and helloservice examples? that's a good idea, i'll try them
on his machine.
 
here's my client code (it's based on j2ee tutorial dynamicproxy example):
 
package procnetService;
 
import java.net.URL;
import javax.xml.rpc.Service;
import javax.xml.rpc.JAXRPCException;
import javax.xml.namespace.QName;
import javax.xml.rpc.ServiceFactory;
import com.edms.utils.*;
 
public class ProcnetClient {
 
 public static void main (String args[]) {
  try {
   String nameSpaceUri = "urn:EDIS";
   String serviceName = "ProcnetService";
   String portName = "ProcnetServiceIFPort";
   
   String adminDir = GenString.appendSlash (args[0]);
   String pron = args[1];
   String version = args[2];
   String open = args[3];
   String close = args[4];
   String loginRequired = args[5];
   
   String username = GenConfig.getConfigParam (adminDir, "ProcnetUsername");
   String password = GenConfig.getConfigParam (adminDir, "ProcnetPassword");
   
   String keyStore = GenConfig.getConfigParam (adminDir, "keyStore");
   String keyStorePassword = GenConfig.getConfigParam (adminDir,
"keyStorePassword");
   String trustStore = GenConfig.getConfigParam (adminDir, "trustStore");
   String trustStorePassword = GenConfig.getConfigParam (adminDir,
"trustStorePassword");
   
   System.setProperty("javax.net.ssl.keyStore", keyStore);
   System.setProperty("javax.net.ssl.keyStorePassword", keyStorePassword);
   System.setProperty("javax.net.ssl.trustStore", trustStore);
   System.setProperty("javax.net.ssl.trustStorePassword",
trustStorePassword);
   
   SocketConfig socketConfig = new SocketConfig (adminDir);
   if (socketConfig.getConfig ("ProcnetService") < 0) {
    System.out.println (socketConfig.results);
    System.exit (-1);
   }
   StringBuffer url = new StringBuffer ("http");
   if (socketConfig.flag) url.append ("s");
   url.append ("://");
   url.append (socketConfig.server);
   url.append (":");
   url.append (socketConfig.port);
   url.append ("/procnetService/procnetService?WSDL");
   
   URL loginWsdlUrl = new URL (url.toString());
   ServiceFactory serviceFactory = ServiceFactory.newInstance();
   Service procnetService = serviceFactory.createService(loginWsdlUrl, new
QName(nameSpaceUri, serviceName));
   ProcnetServiceIF procnetServiceIF = (ProcnetServiceIF)
procnetService.getPort(new QName(nameSpaceUri, portName),
    ProcnetServiceIF.class);
   
   JaxRpcResult result = procnetServiceIF.publish (pron, version, open,
close, loginRequired, username, password);
   System.out.println (result.text);
   if (result.status < 0) System.exit (-1);
  } catch (Exception e) {
   System.out.println ("ProcnetClient exception: " + e.getMessage());
   System.exit (-1);
  }
  System.exit (0);
 }
 
}
 
here's my IF (it's based on j2ee tutorial helloservice example):
 
package procnetService;
 
import java.util.*;
import java.rmi.Remote;
import java.rmi.RemoteException;
import com.edms.utils.*;
 
/*
Two things make this work:
 
1 - add \EdisDev\Generic;\EdisDev\EdisJSP\web-inf\classes to the system
classpath
2 - edit C:\j2eetutorial14\examples\jaxrpc\common\targets.xml and add
/EdisDev/Generic to the generate-wsdl target's classpath
*/
 
public interface ProcnetServiceIF extends Remote {
 public JaxRpcResult publish (String pron, String version, String open,
String close, String loginRequired,
  String username, String password) throws RemoteException;
}

and here's Impl:
 
package procnetService;
 
import java.util.*;
import java.text.SimpleDateFormat;
import com.edms.utils.*;
import com.edis.utils.*;
 
public class ProcnetServiceImpl implements ProcnetServiceIF {
 
 private String adminDir, tempDir = "/Temp";
 
 public ProcnetServiceImpl() {
  adminDir = GenConfig.getAdminDir ("c:/", "procnetService");
  String str = GenConfig.getConfigParam (adminDir, "TempDirectory");
  if (str != null) tempDir = GenString.appendSlash (str);
 }
 
 public static void main (String args[]) {
  ProcnetServiceImpl procnetServiceImpl = new ProcnetServiceImpl();
// procnetServiceImpl.publish ("ABCDEF", "5", "blpotter", "aub617");
 }
 
 public JaxRpcResult publish (String pron, String version, String open,
String close, String loginRequired,
  String username, String password) {
  System.out.println ("ProcnetServer.publish: PRON - " + pron + ", Version -
" + version);
  
  CdArchive cdArchive = new CdArchive (adminDir, tempDir);
  EdisJdbc edisJdbc = new EdisJdbc (adminDir, tempDir);
  EdisUser edisUser = new EdisUser (adminDir);
  if (edisUser.edisLogin (username, password) != 0)
   return new JaxRpcResult (-1, edisUser.results);
 
  int status = cdArchive.toProcnet (pron, version, open, close,
loginRequired, edisJdbc, edisUser);
 
  return new JaxRpcResult (status, cdArchive.results);
 }
 
}
 

-----Original Message-----
From: kathy walsh [ mailto:Kathleen.Walsh_at_Sun.COM
<mailto:Kathleen.Walsh_at_Sun.COM> ]
Sent: Friday, October 01, 2004 12:48 PM
To: users_at_jax-rpc.dev.java.net <mailto:users_at_jax-rpc.dev.java.net>
Subject: Re: HTTP transport error: java.net.UnknownHostException


Brian-
do you note this problem using standalone jaxrpc?
I will look into this and let you know what I find-
It would be helpful if you could send me the clients dynamic proxy
example so that I can check for any problem I might see-
Thanks,
Kathy

Potter, Brian L wrote:

i've used J2EE 1.4 sdk to write a JAXRPC web service based on the
dynamicproxy example in the J2EE 1.4 tutorial. it works great on my
development machines, but when my customer deploys the service and makes a
request, the client crashes with:
 
HTTP transport error: java.net.UnknownHostException: JohnDoe
 at
com.sun.xml.rpc.client.http.HttpClientTransport.invoke(HttpClientTransport.j
ava:101)
 at com.sun.xml.rpc.client.StreamingSender._send(StreamingSender.java:69)
 at
com.sun.xml.rpc.client.dii.CallInvokerImpl.doInvoke(CallInvokerImpl.java:61)
 at com.sun.xml.rpc.client.dii.BasicCall.invoke(BasicCall.java:446)
 at
com.sun.xml.rpc.client.dii.CallInvocationHandler.doCall(CallInvocationHandle
r.java:99)
 at
com.sun.xml.rpc.client.dii.CallInvocationHandler.invoke(CallInvocationHandle
r.java:71)
 at $Proxy0.login(Unknown Source)

apparently the request is sent using the hostname (JohnDoe) instead of the
IP address (which is what i used in the WSDL URL when i created the proxy).
the client can ping the server using the IP address, but not using JohnDoe
(for some network configuration reason i'm not entirely clear on).
 
my question is: why is the request sent to the server by hostname instead of
IP address?
 
i found this after doing a google search on my error at
http://java.sun.com/j2se/1.3/docs/guide/rmi/faq.html#netcontact
<http://java.sun.com/j2se/1.3/docs/guide/rmi/faq.html#netcontact> :
 
If your RMI application throws an UnknownHostException, you can look at the
resulting stack trace to see if the hostname that the client is using to
contact its remote server is incorrect or not fully-qualified. If necessary,
you can set the java.rmi.server.hostname property on the server to the
correct IP address or hostname of the server machine and RMI will use this
property's value to generate remote references to the server.
 
but i don't know where i can set the hostname property in my server code,
since it's not executed until after the request is made.
 
btw, my development machines are running windows XP and NT, my customer is
strictly NT.

Brian L. Potter
Software Scientist
Solutions Group
Intergraph Corporation (NASDAQ:INGR)
170 Graphics Drive, Madison, AL 35758
P 1.256.730.8219 F 1.256.730.7514
brian.potter_at_intergraph.com <mailto:brian.potter_at_intergraph.com> <
mailto:brian.potter_at_intergraph.com <mailto:brian.potter_at_intergraph.com> >,
www.intergraph.com <http://www.intergraph.com>