本帖最后由 dingjk007 于 2010-12-31 11:03:53 编辑

解决方案 »

  1.   

    在jsp中调用webservice和在java中调用方法是一样的。
      

  2.   

    参考今天在写webservice服务端写好之后(第一次写webservice)相关阅读:怎么写webservice。那现在来说说webservice客户端怎么写?第一次写webservice感觉过程还是挺扭曲的;但是发现用MyEclipse来生成webservice真是很简单;不过倒是webservice和Struts2的集成还有和spring的集成倒是花了不少时间,下面看看webservice客户端的写法:如果你要用MyEclipse自动生成的一些客户端代码,那里面的东西可能比较多;它自动生成的代码里面包含了可以对wsdl文件进行分析的方法,我们如果只是为了调用webservice,那么我们的客户端没有必要用那个自动生成。我们来看看webservice客户端的写法:String result = "";//这里是返回结果webservice的返回结果
    try{
    Client client = new Client(new URL("http://localhost:8080/services/JgzsService?wsdl"));//这里是调用webservice的地址
    Object[] res = client.invoke("saveJgzsContent", new Object[] {"title","content"});
    //这里的res是webservice返回的结果是一个object数组,saveJgzsContent是调用webservice的方法,new Object[] {"title","content"});这里是被调用webservice的方法,这里有两个参数
    result = (String) res[0];
    System.out.println (result);

    catch (Exception e) {
    e.printStackTrace();
    // return result;

    }
      

  3.   


    把客户端调用的地址localhost:8080改成服务器的地址就行了 
      

  4.   

    我不是想搭建WebService,有现成的WebService,我只是想调用WebService,并获得返回的XML数据,第一次做这个,所以不太了解,我的框架是STRUTS 1 框架,如果需要调用WebService的话,都需要配置哪些写哪些?JSP,ACTION里面分别都写什么?可以提供点DEMO么?
      

  5.   

    调用的时候很简单 你只要知道 所调用方法的接口就可以了 
    public static void main(String[] args) {
    String targetEndPoint = "http://135.224.78.18:8080/Indicator/services/FunctionUtils"; Service ser = new Service();
    try {
    Call call = (Call) ser.createCall();
    call.setTargetEndpointAddress(targetEndPoint);

    //获取指标信息
    call.setOperation("getIndAndMeaAndDimInfoToXML");//调用的方法
    String indAndMeaAndDimStr = (String) call.invoke(new Object[]{ new String("CYE6021200")});//方法中传递的参数
    System.out.println("indAndMeaAndDimStr==========="+indAndMeaAndDimStr); //打印调用的方法所返回的结果

    } catch (ServiceException e) {
    e.printStackTrace();
    } catch (RemoteException e) {
    e.printStackTrace();
    }
    }
      

  6.   

    用AXIS2插件来生成wsdl的客户端,然后直接调用客户端生成的接口不就行了么?
      

  7.   

    不好意思,前段时间出差,一直没回帖,
    请问上面的
    Service ser = new Service();
    引的是JAVA的哪个Service包呢?
    是import com.sun.xml.internal.ws.wsdl.parser.Service;
    这个么?
    可是如果用的是这个包, new Service()里面让写参数,写什么参数呢?
    而且用这个包的话,ser.createCall();不好用的!
    请指教
      

  8.   

    我是这么写的,可是返回的结果不对,是我参数传错了么?参数应该怎么写呢?
    代码如下~
    /**
     * @param args
     */
    public static void main(String[] args) throws ServiceException, RemoteException{
    try  
            {   
                // 服务端的url,需要根据情况更改。   
                String endpointURL = "http://116.236.252.205/rt/Service.asmx?WSDL";   
                Service service = new Service();   
                Call call = (Call) service.createCall();   
                call.setTargetEndpointAddress(new java.net.URL(endpointURL));   
                call.setSOAPActionURI("http://tempuri.org/" + "GetTrafficData");   
                call.setOperationName(new QName("Service", "GetTrafficData"));// 设置操作的名称。   
                // 由于需要认证,故需要设置调用的用户名和密码。   
                SOAPHeaderElement soapHeaderElement = new SOAPHeaderElement("http://tempuri.org/", "complexType");   
                soapHeaderElement.setNamespaceURI("http://tempuri.org/");   
                try  
                {   
                    soapHeaderElement.addChildElement("strCustomID").setValue("user");   
                    soapHeaderElement.addChildElement("strPassword").setValue("password");
                    soapHeaderElement.addChildElement("strResult").setValue("实时状况");
                }   
                catch (SOAPException e)   
                {   
                    e.printStackTrace();   
                }   
                call.addHeader(soapHeaderElement);   
                call.setReturnType(XMLType.XSD_STRING);// 返回的数据类型   
                call.addParameter("op1", XMLType.XSD_STRING, ParameterMode.IN);// 参数的类型   
                String ret = (String) call.invoke(new Object[] { "smg" });// 执行调用   
                System.out.println(ret);   
            }   
            catch (Exception e)   
            {   
                e.printStackTrace();   
            }   
    }其中
    call.addParameter("", XMLType.XSD_STRING, ParameterMode.IN);// 参数的类型   
                String ret = (String) call.invoke(new Object[] { "" });// 执行调用 
    这两个引号里应该写什么参数呢?
    下面的是SOAP1.2请求以下是 SOAP 1.2 请求和响应示例。所显示的占位符需替换为实际值。POST /rt/Service.asmx HTTP/1.1
    Host: 116.236.252.205
    Content-Type: application/soap+xml; charset=utf-8
    Content-Length: length<?xml version="1.0" encoding="utf-8"?>
    <soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
      <soap12:Body>
        <GetTrafficData xmlns="http://tempuri.org/">
          <strCustomID>string</strCustomID>
          <strPassword>string</strPassword>
          <strResult>string</strResult>
        </GetTrafficData>
      </soap12:Body>
    </soap12:Envelope>
    我返回的结果是:
    <TrafficData CustomID=""><Result ErrorCode="-10001" Message="用户不存在" /></TrafficData>请问是上面哪里写的错误了呢?
    在线等
      

  9.   

    这个Call和Service的包都是 axis下的包 
    org.apache.axis.client.Service
    org.apache.axis.client.Call