新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     >>计算机科学论坛<<     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> Web服务(Web Services,WS), 语义Web服务(Semantic Web Services, SWS)讨论区: WSDL, SOAP, UDDI, DAML-S, OWL-S, SWSF, SWSL, WSMO, WSML,BPEL, BPEL4WS, WSFL, WS-*,REST, PSL, Pi-calculus(Pi演算), Petri-net,WSRF,
    [返回] 计算机科学论坛W3CHINA.ORG讨论区 - Web新技术讨论『 Web Services & Semantic Web Services 』 → 总结java开发web service的方法 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 16262 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: 总结java开发web service的方法 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     titanbai 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:5
      积分:91
      门派:XML.ORG.CN
      注册:2006/7/14

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给titanbai发送一个短消息 把titanbai加入好友 查看titanbai的个人资料 搜索titanbai在『 Web Services & Semantic Web Services 』的所有贴子 引用回复这个贴子 回复这个贴子 查看titanbai的博客楼主
    发贴心情 总结java开发web service的方法

    目前看到的有三种比较简单的方法:
    1使用静态的stub
    通过wsdl2java工具,处理相应ws的wsdl文件,我们可以得到远程ws的stub 直接调用这
    个stub即可
    AXIS提供的wsdl2java工具,如下:
    java org.apache.axis.wsdl.WSDL2Java (WSDL-file-URL)
    我们直接调用stub即可
    eclipse也有相应的插件可以直接import wsdl来产生stub,如果你安装了EMF all in one版本的eclipse 3.1,就可以在视图里把Web Service的相关视图打开,接着就可以通过Web Service的Wizard来创建出相关的Web Service Client或者Server

    2 Dynamic Proxy
    根据远程wsdl,利用javax.xml.rpc.Service的getPort函数,可以得到远程ws的一个 D
    ynamic Proxy
    编写代理接口

    public interface HelloClientInterface
    extends Java.rmi.Remote
    {
        public String getName(String name)
            throws Java.rmi.RemoteException;
    }

    客户端程序TestHelloClient.Java

    import Javax.xml.rpc.Service;
    import Javax.xml.rpc.ServiceFactory;
    import Java.net.URL;
    import Javax.xml.namespace.QName;

    public class TestHelloClient
    {
        public static void main(String[] args)
            {
            try
            {
       String wsdlUrl = "http://localhost:8080/axis/HelloClient.jws?wsdl";
       String nameSpaceUri = "http://localhost:8080/axis/HelloClient.jws";
    String serviceName = "HelloClientService";
    String portName = "HelloClient";
    ServiceFactory serviceFactory = ServiceFactory.newInstance();
    Service afService = serviceFactory.createService(new URL(wsdlUrl),
               new QName(nameSpaceUri, serviceName));
    HelloClientInterface proxy = (HelloClientInterface)afService.getPort(new QName(
                  nameSpaceUri, portName), HelloClientInterface.class);
    System.out.println("return value is "+proxy.getName("john") ) ;
            }catch(Exception ex)
            {
                ex.printStackTrace() ;
            }
        }
    }

    3 DII
    Dynamic Invocation Interface 这个最好理解,比如你动态获得了一个类,只知道类的
    名字,你要调用他的一个方法,只好使用reflection得到你要调用的类,相应的参数信
    息,然后调用
    使用DII调用WS的时候,你知道的只是一个WSDL的地址,通过解析wsdl,你可以得到相应
    的ws endpoint的信息,然后通过javax.xml.rpc.Call的setOperationName, addParam
    eter等函数来指定要调用的函数,指定参数,然后调用
    提供DII调用的原因是,我们有可能使用程序自动的去动态调用网络上的WS,而这个WS的
    一切信息都是来自其WSDL
    ,只有通过DII,我们才有可能动态的去调用这个ws
    例子:
    服务器端程序

    public class HelloClient
    {
        public String getName(String name)
        {
            return "hello "+name;
        }
    }
    把源码拷贝到AXIS_HOME下,并改名为 HelloClient.jws

    客户端程序
    import org.apache.Axis.client.Call;
    import org.apache.Axis.client.Service;
    import Javax.xml.namespace.QName;
    import Javax.xml.rpc.ServiceException;
    import Java.net.MalformedURLException;
    import Java.rmi.RemoteException;

    public class SayHelloClient2
    {
        public static void main(String[] args)
            {
            try
                    {
      String endpoint =  "http://localhost:8080/axis/HelloClient.jws";

        Service service = new Service();
                Call call = null;

                call = (Call) service.createCall();

                call.setOperationName
       (new QName("http://localhost:8080/axis/HelloClient.jws", "getName"));
                call.setTargetEndpointAddress(new Java.net.URL(endpoint));

    String ret =
    (String) call.invoke(new Object[]
         {"zhangsan"});
      System.out.println
      ("return value is " + ret);
            }
                    catch (Exception ex)
                    {
           ex.printStackTrace();
            }
        }
    }


       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/7/18 8:39:00
     
     jpz6311whu 帅哥哟,离线,有人找我吗?
      
      
      
      威望:9
      等级:研三(收到微软亚洲研究院的Offer了)(版主)
      文章:1718
      积分:10610
      门派:W3CHINA.ORG
      注册:2005/4/12

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给jpz6311whu发送一个短消息 把jpz6311whu加入好友 查看jpz6311whu的个人资料 搜索jpz6311whu在『 Web Services & Semantic Web Services 』的所有贴子 引用回复这个贴子 回复这个贴子 查看jpz6311whu的博客2
    发贴心情 
    谢谢!
    请楼主指明AXIS的版本,axis 1和axis 2的API相差比较大
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/7/18 10:54:00
     
     titanbai 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:5
      积分:91
      门派:XML.ORG.CN
      注册:2006/7/14

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给titanbai发送一个短消息 把titanbai加入好友 查看titanbai的个人资料 搜索titanbai在『 Web Services & Semantic Web Services 』的所有贴子 引用回复这个贴子 回复这个贴子 查看titanbai的博客3
    发贴心情 
    我用的是axis 1.4版
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/7/18 11:13:00
     
     flyfoxs 帅哥哟,离线,有人找我吗?
      
      
      威望:5
      等级:研一(Artificial Intelligence期期不放过)
      文章:550
      积分:3935
      门派:XML.ORG.CN
      注册:2005/1/8

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给flyfoxs发送一个短消息 把flyfoxs加入好友 查看flyfoxs的个人资料 搜索flyfoxs在『 Web Services & Semantic Web Services 』的所有贴子 引用回复这个贴子 回复这个贴子 查看flyfoxs的博客4
    发贴心情 
    用AXIS好像生成的代码里面有enum这个变量名,但在1.5+版本里面,这又是个关键字,不能做变量名。

    不知道大家有没有遇到过这个问题,又是如何解决的?

    ----------------------------------------------
    存在即是被搜索!

    BLOG =>  http://www.OpenJ.cn

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/7/19 22:09:00
     
     dihin 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:0
      积分:61
      门派:XML.ORG.CN
      注册:2006/7/4

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给dihin发送一个短消息 把dihin加入好友 查看dihin的个人资料 搜索dihin在『 Web Services & Semantic Web Services 』的所有贴子 引用回复这个贴子 回复这个贴子 查看dihin的博客5
    发贴心情 
    我遇到了
    把enum 换成别的名字就可以了
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/7/26 17:01:00
     
     oicq我爱玩 帅哥哟,离线,有人找我吗?
      
      
      等级:大一(猛啃高等数学)
      文章:18
      积分:150
      门派:XML.ORG.CN
      注册:2006/7/25

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给oicq我爱玩发送一个短消息 把oicq我爱玩加入好友 查看oicq我爱玩的个人资料 搜索oicq我爱玩在『 Web Services & Semantic Web Services 』的所有贴子 引用回复这个贴子 回复这个贴子 查看oicq我爱玩的博客6
    发贴心情 
    学习........
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/7/27 17:20:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 Web Services & Semantic Web Services 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2025/6/21 16:27:14

    本主题贴数6,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    93.750ms