你的WebService只要发布出去,并且对应的业务逻辑编写完成了,调用是对方的事情。
比如你现在要自己写一个程序来测试你的接口是不是能够正常工作,可以先把发布好的WSDL保存到一个文件中,命名为WSDL,然后使用axis自带的WSDL2JAVA把他转换成对应的java类,一般情况下,这些类中有一个以porttype结尾,这个类可以看做你要调用的对象类,把这些生成的代码放到你的工程里边(或者打包依赖)。
比如:
我把一个public String getName(String id)的方法,发布成了WebService,将生成的WSDL通过
java -cp axis.jar;commons-discovery-0.2.jar;commons-logging-1.0.4.jar;jaxrpc.jar;log4j-1.2.8.jar;saaj.jar;wsdl4j-1.5.1.jar org.apache.axis.wsdl.WSDL2Java GetUserNameService.wsdl生成的类如下
GetUserNameService.java
GetUserNameServiceHttpBindingStub.java
GetUserNameServiceLocator.java
GetUserNameServicePortType.java在你的代码中这样调用服务
GetUserNameService locator = new GetUserNameServiceLocator(new URL("WSDL的地址"));
GetUserNameServicePortType service = locator.getGetUserNameServiceHttpPort();
service.getName("1");//业务方法

解决方案 »

  1.   

    首先,webservice是被动的被别人调用,本身无行为能力,如果要达到楼主的效果,必须有个触发的行为。比如,A和B都各自部署完毕,你所需要的是,启动一个行为C,C调用webserviceA, A被调用的行为内再调用B,
    反之要B调用A也是如此。他们本身不会触发,必须有个另外的行为。
      

  2.   

    lz可能是想问我们在进行基于web服务的开发时,当调用web服务方法一般传递什么类型的参数,以及web服务的业务逻辑完成后又以什么样的类型返回,即web服务方法的返回值类型。可是目前大家一般在举例时都只是用简单java自带的类型作为参数和返回值,比如String。不过,可以肯定的是,axis能够处理复杂的自定义数据类型。
    下面这篇文章讲的很好,与lz共同学习一下。
      

  3.   

    什么是AxisXML:namespace prefix = o ns = "urn:schemas-microsoft-com:Office:office" />
    Axis本质上是一个SOAP引擎,但Axis也不仅仅是一个SOAP引擎,可以称作是一个Web services。由于本文重点不在于些,请您参考《Axis用户指南》
    您必需了解的知识
    如果您是一个Java,Servlet和SOAP的新手,那您可能会遇到很多关于Axis的麻烦,所以这时不建议您编写Axis的客户和服务程序。当您基本了解了如下知识时,您就可以开始Axis之旅了。Java的数据类型,类和编程概念的核心。 
    什么是线程(threads),竞态条件(race conditions),线程安全(thread safety)和同步(sychronization) 。 
    什么是classloader,什么是多等级classloader,和"ClassNotFoundException"异常的共同原因。 
    怎么样诊断来自己异常跟踪到的问题,NullPointerException(NPE)和其它共同异常是什么,并且知道怎么修改他们。 
    什么是web 应用;什么是servlet,类,类库和数据放在Web应用中的什么位置。 
    怎么启动您的应用服务,怎么发布一个web应用到应用服务上。 
    什么是网络,IP协议概念的核心和那些sockets API。特别是,什么是TCP/IP。 
    什么是HTTP。核心协议和错误代码,Http头和大部分的验证细节。 
    什么是XML。尽管您不需要了解怎么样解释她或是其它的技术,但要知道怎么制定好的样式并且正确的XML。
    Axis的安装
    由于我们在本文中使用JBuilder 8开发,所以如何安装Axis并不重要。如果您想了解Axis的安装,请您参考《Axis安装说明》
    开始Jbuider 8和Axis之旅
    1、打开Jbuider 8,建一个新工程Axistour,再建一个Web应用tour,这里使用tomcat-4.0.6-LE-JDK14;
    2、建一个Web Services,选择web services configuration,OK后按向导的缺省操作进行;
    ASPectratio="t" v:ext="edit">
    3、 检验Axis工程。编译Axisour工程,选择tour/Root directory/index.html,右键菜单中选择:Web run using “Web Services Server”,其中引号中的Web Services Server指web services的名字,如果您在前面的向导第二步输入了其它的名字,这里应显示您输入的那个名字;
    4、点击index.html中的链接,如果全部正常执行,表示您的Axis已正常工作。特别注意的是”Validate”链接:
    5、检验完成开始编写Axis的服务端程序,建一个自己定义的复杂数据类型Data(Data.java),这个类必需是遵循java bean规范。代码如下:
     
    package com.neusoft.axistour;
     
    import java.util.HashMap;
     
    public class Data {
      private String author=null;
      private String address=null;
      private HashMap hmap=null;
      public Data() {
      }
     
      public String getAddress(){
        return address;
      }
      public void setAddress(String address){
        this.address=address;
      }
     
      public String getAouthor(){
        return author;
      }
      public void setAouthor(String author){
        this.author=author;
      }
     
      public HashMap getHMap(){
        return hmap;
      }
      public void setHMap(HashMap map){
        this.hmap=map;
      }
    }
    6、创建Axis 服务类,DataServices.java
    package com.neusoft.axistour;
     
    import java.util.HashMap;
    public class DataServices {
     
      public Data buildData(String address,String aouthor ){
        Data data=new Data();
        data.setAddress(address) ;
        data.setAouthor(aouthor) ;
        HashMap map=new HashMap();
        map.put("key1","value1") ;
        map.put("key2","value2") ;
        map.put("key3","value3") ;
        data.setMap(map);
        return data;
      }
    }
     
    7、选择DataServices.java,右键菜单中选择Export as a web services,按缺省的向导,完成Axis的导出,生成deploy.wsdd和wsdl,其中deploy.wsdd至关重要,而wsdl文件在这里并不重要;
    8、到此您已完成Axis的服务程序,编译整个工程,启动web services;
    9、测试wsdl,如果您的Http端口是8080(如果您本机的web服务不是8080,请改为您本机相应的端号,请访问如下URL:http://localhost:8080/tour/services/DataServices?wsdl
      

  4.   

    11、            VB客户端代码,由于使用了自定义的数据类型,所以只能使用microsoft soap开发包的低端API,这里使用SOAP Toolkit 2.0,代码如下:
    Option Explicit
     
    Private Sub Command1_Click()
    On Error GoTo ErrorHandler
        
        Dim Serializer As SoapSerializer
        Dim Reader As SoapReader
        Dim Connector As SoapConnector
        Dim Method As String
        
        Dim Dom As MSXML2.DOMDocument30
        Dim Elm As IXMLDOMElement
        
        Method = Trim(Text2.Text)
        If Method = "" Then
          MsgBox "请输入方法名!"
          Exit Sub
        End If
        Set Connector = New HttpConnector
        Connector.Property("EndPointURL") = Text1.Text
        'Connector.Property("SoapAction") = BASE_SOAP_ACTION_URI & Method
        Connector.BeginMessage
        
        Set Serializer = New SoapSerializer
        Serializer.Init Connector.InputStream
        
        Serializer.startEnvelope
        Serializer.startBody
        Serializer.startElement Method, "", "", ""
     
    '方法的参数
    Serializer.startElement "address"
        Serializer.writeString "dalian"
        Serializer.endElement
    Serializer.startElement "aouthor"
        Serializer.writeString "neusoft"
        Serializer.endElement
        
        Serializer.endElement
        Serializer.endBody
        Serializer.endEnvelope
        
        Connector.EndMessage
        
        Set Reader = New SoapReader
        Reader.Load Connector.OutputStream
        
        If Not Reader.Fault Is Nothing Then
            MsgBox Reader.faultstring.Text, vbExclamation
        Else
            Text3.Text = Reader.Dom.xml
        End If
     
        Exit Sub
        
    ErrorHandler:
     
        MsgBox "ERROR: " & Err.Description, vbExclamation
        Err.Clear
        Exit Sub
     
    End Sub
     
    Private Sub Form_Load()
    Text1.Text = "http://localhost:8080/tour/services/DataServices?wsdl"
    Text2.Text = ""
    Text3.Text = ""
    End Sub
    12、            VC代码,建一个Win32 Console Application:
    #include "stdafx.h"#include <stdio.h>#import "msxml3.dll"using namespace MSXML2;//根据自己机器的情况修改下面语句中指定的路径#import "C:\Program Files\Common Files\MSSoap\Binaries\mssoap1.dll" \        exclude("IStream", "ISequentialStream", "_LARGE_INTEGER", \        "_ULARGE_INTEGER", "tagSTATSTG", "_FILETIME") using namespace MSSOAPLib; void axisTourClient(){           ISoapSerializERPtr Serializer;       ISoapReaderPtr Reader;        ISoapConnectorPtr Connector;       // 联接services            Connector.CreateInstance(__uuidof(HttpConnector));       Connector->Property["EndPointURL"] = "http://localhost:8080/tour/services/DataServices?wsdl";       Connector->Connect();         // Begin message       Connector->BeginMessage();        // Create the SoapSerializer           Serializer.CreateInstance(__uuidof(SoapSerializer));           // Connect the serializer to the input stream of the connector       Serializer->Init(_variant_t((IUnknown*)Connector->InputStream));           // Build the SOAP Message           Serializer->startEnvelope("","","");        Serializer->startBody("");              Serializer->startElement("buildData","","","");//参数Serializer->startElement("address","","","");
    Serializer->writeString( "dalian");
    Serializer->endElement();
    Serializer->startElement("aouthor","","","");
    Serializer->writeString ("neusoft");
    Serializer->endElement();
            Serializer->endElement();       Serializer->endBody();          Serializer->endEnvelope();                          Connector->EndMessage();                      Reader.CreateInstance(__uuidof(SoapReader));          Reader->Load(_variant_t((IUnknown*)Connector->OutputStream), "");            // 显示结果       printf("Response: %s\n", (const char*)Reader->DOM->xml );  } 
    int main(int argc, char* argv[]){       CoInitialize(NULL);       axisTourClient();           CoUninitialize();                    return 0;}13、            到现在为止可以说您走出Axis之旅的第一步。
      

  5.   

    最后说明:
    1、在Axis中,将自定义的复杂数据类型序列化成xml有两种方法,一种方法是前面使用的JavaBean方法,使用Axis提供的Bean序列化工厂(BeanSerializerFactory)来实现序列化;另一种方法是自己编写序列化工厂和反序列化工厂,这种方法这里将不做说明。另外其它web service产品也应提供这两种方法;
    2、虽然前面曾说到wsdl不重要,这只是说在这里不重要,Axis会利用web-inf下的server-config.wsdd web服务发布描述文件(Web Service Deployment Descriptor)生成wsdl,其实wsdl依然是web services的核心描述;
    3、如果生成的war包在某些版本的tomcat或其它web引擎中不能运行,请参考Axis的安装说明;
    至于客户端的调用那段代码,他写的有点低级了,我想应该有更好的方法生成服务的客户端,那么我们应该注意的是,怎样自定义一个复杂的类型。第五步中,Data.java这个类就是自定义的,只要按照这种方法定义数据类型,实现任意数据的交互。
      

  6.   

    谢谢以上朋友的回复 有位朋友说到参数问题,其实大多数web service都是把xml当作参数传递的,
    因为xml能被各个语言识别,这个倒不是什么大问题。我想补充一下  我的web service发布后是以xml格式在浏览器上打开的
    那么对方肯定也是。
    比如说天气预报的web service是
    http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl我的是   http://***.***.***.***/axis/MyWebService.jws?wsdl2个网页都没有提供接收请求的窗口  ,怎样来触发他们知道我们在请求调用呢?如果说用第3方来触发 ,那应该是个什么东西?
      

  7.   

    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++力争成为中国最大的架构师群联盟,架构师1群:43545919已满,2群:59048426的招募也近尾声,
    现3群:17303696正式 开放,各群内容基本相同,高手也经过群主进行了调整,希望大家不必重复加入!
    培训经过筛选才会进行,请大家不必 着急!!!已经上传的顶级软件产品的架构分析,本群资料仅供研究学习,不得商用!!!
    google 、
    eBay、
    Youtube、
    淘宝等
    ......
    技术文章包括:
    《自己动手写操作系统》
    《搜索引擎-原理、技术与系统》
    《企业应用架构模式》
    ......
    重要的RUP实例
    设计模式精解
    ......
    资料陆续上传中++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      

  8.   

    一般就是http://***.***.***.***/axis/MyWebService.jws了
      

  9.   

    有位朋友说到参数问题,其实大多数web service都是把xml当作参数传递的, 
    因为xml能被各个语言识别,这个倒不是什么大问题。 我想补充一下  我的web service发布后是以xml格式在浏览器上打开的 
    那么对方肯定也是。 
    比如说天气预报的web service是 
    http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl 我的是   http://***.***.***.***/axis/MyWebService.jws?wsdl 2个网页都没有提供接收请求的窗口  ,怎样来触发他们知道我们在请求调用呢? 如果说用第3方来触发 ,那应该是个什么东西?