虽然我已经设置了代理身份验证,但在java中通过SOAP body方法使用Web服务时出错

时间:2012-03-13 06:40:22

标签: web-services

通过SOAP方法在java中使用webservices时获取错误。 Plz建议,过去10天我被困在这里。我将此服务器用于webservices "http://www.webservicex.net/globalweather.asmx"

错误:

Exception in thread "main" [SOAPException: faultCode=SOAP-ENV:Client; msg=Error 
opening socket: Connection timed out: connect;
targetException=java.lang.IllegalArgumentException: Error opening 
socket: Connection timed out: connect]
at org.apache.soap.transport.http.SOAPHTTPConnection.se(SOAPHTTPConnection.java:324)
 at org.apache.soap.rpc.Call.invoke(Call.java:205)
 at com.check.ClientNet.main(ClientNet.java:47)  

我的java代码是:

package com.check;

import java.net.*;
import java.util.*;

import org.apache.soap.*;
import org.apache.soap.encoding.SOAPMappingRegistry;
import org.apache.soap.rpc.*;
import org.apache.soap.encoding.soapenc.StringDeserializer; 
import org.apache.soap.util.xml.QName; 
import com.check.ProxyAuthenticator;

public class ClientNet {

  public static void main (String[] args) 
       throws Exception {

             Properties properties = System.getProperties();
        properties.put("http.proxyHost", "10.136.236.30");
        properties.put("http.proxyPort", "8080");
        properties.put("http.proxyUser", "bnkishore");
        properties.put("http.proxyPassword","XXXX");
        Properties newprops = new Properties(properties);
        System.setProperties(newprops);
        String username = System.getProperty("http.proxyUser");
         String password = System.getProperty("http.proxyPassword");     
        if (username != null && !username.equals("")) {         
           Authenticator.setDefault(new ProxyAuthenticator(username, password));                
        }      

    System.out.println("\n\nCalling the SOAP Server:\n\n");          
    //http://www.webservicex.net/globalweather.asmx
    URL url = new URL ("http://www.webservicex.net/globalweather.asmx");
    String CountryName = "India";
    Call call = new Call();    
    SOAPMappingRegistry soapMappingRegistry = new SOAPMappingRegistry(); 
    soapMappingRegistry.mapTypes(Constants.NS_URI_SOAP_ENC, new QName("http://www.webserviceX.NET", "globalweather"),null,null, new StringDeserializer());   
    call.setTargetObjectURI("http://www.webserviceX.NET");  
    call.setMethodName("GetCitiesByCountry");       
    call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
    Vector<Parameter> params = new Vector<Parameter>();
    params.addElement(new Parameter("CountryName", String.class, CountryName, null));   
    call.setParams (params);

    System.out.print("The SOAP Server says: ");

    Response resp = call.invoke(url, " ");

    if (resp.generatedFault()) {
      Fault fault = resp.getFault();
      System.out.println("\nOuch, the call failed: ");
      System.out.println("  Fault Code   = " + fault.getFaultCode());
      System.out.println("  Fault String = " + fault.getFaultString());
    } else {
      Parameter result = resp.getReturnValue();
      System.out.print(result.getValue());
      System.out.println();
    }
  }

}

ProxyAuthencator代码是:

package com.check;

import java.net.Authenticator;
import java.net.PasswordAuthentication;

public class ProxyAuthenticator extends Authenticator {
    private String userName, passWord;

    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(userName,passWord.toCharArray());       
    }

    public ProxyAuthenticator(String userName, String password) {
        this.userName = userName;
        this.passWord = password;
        getPasswordAuthentication();
    }
}

感谢。

1 个答案:

答案 0 :(得分:0)

存在超时,这意味着您的客户端未到达服务器。检查连接。对于处理代理,除了ProxyAuthenticator之外,您还需要添加一些系统属性:proxySetproxyHostproxyPort。如果你使用的是maven,你可以这样做:

 mvn jetty:run -DproxySet=true -DproxyHost=proxy.indra.es -DproxyPort=8080