netbeans中如何在已有生成的Webservice stub中改变endpoint地址
来源:互联网 发布:虚拟币交易平台源码 编辑:程序博客网 时间:2024/06/06 18:40
用netbeans开发webservice非常方便,当然,有jdk6环境是最佳,但有个问题经常困惑我们,就是在测试环境或开发环境中完成的代码要实施部署到其他机器上 时,我们会束手无策,只好一个个去改代码中的目标endpoint地址;有人说用配置文件啊,呵呵,在纯粹手动写的axis或xfire中也许很方便,但在netbeans中这些自动生成的片段,改起来比较麻烦,虽然开发的时候托托拽拽很方便。以前,我一直就是这么安慰自己,事物都有两面性嘛!最近看到Sun Webservice老大arun gupta的文章,发现其实要改变这个很容易,非常容易,不过还是有问题,下面会详细讲述。
举个例子:
按Arun的说法,我们经常使用的wsdl已生成代码来调用webservice,其中,jax-ws的版本是2.1Hello port = new HelloService().getHelloPort();
String result = port.sayHello("Duke!");
当然,上面的描述都是对应特定ip地址发布的webservice,如果将此相同的服务最终部署到其他机器,就不能使用了。所以,我们可以在上面两行之间增加另外一行代码:((javax.xml.ws.BindingProvider)port).getRequestContext().put(javax.xml.ws.BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "NEW_ADDRESS_HERE");
实际使用中直接将NEW_ADDRESS_HERE替换成相应的endpoint地址就行了。
我觉得Arun在测试的时候和我之前是犯了同样的错误,在换了endpoint之后,如果按上面的方法,在原始的app server不关闭的时候是可行的,但这种情况很少发生。在执行“Hello port = new HelloService().getHelloPort();”这句代码时,会先去取原始的wsdl文件,如果原始的app server已关闭,则会报异常,((javax.xml.ws.BindingProvider)port).getRequestContext().put(javax.xml.ws.BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "NEW_ADDRESS_HERE");这句代码就不可能再执行了。
经过摸索,我找到了一个好的方法,具体如下:
首先,要定义新的endpoint的URL:URL endpoint_new = new URL("NEW_ADDRESS_HERE");
再定义一个QName: QName qname = new QName("http://"+"ORIGINAL_PACKAGE","SERVICE_NAME");
其中NEW_ADDRESS_HERE就是新的endpoint地址,ORIGINAL_PACKAGE就是产生的webservice的包,SERVICE_NAME是发布的service名称,试一下就知道,如果填错了,会提示你哪些是有效的写法。
最后,Hello port = new HelloService().getHelloPort();这句要替换掉,改成Hello port = new HelloService(endpoint_new,qname).getHelloPort();
我在jax-ws官网又找到一篇文章:https://jax-ws.dev.java.net/guide/How_to_invoke_and_endpoint_by_overriding_endpoint_address_in_the_WSDL.html。它把上面两种情况都包括进去了,只是没怎么具体说明,让人有点摸不着头脑。
- netbeans中如何在已有生成的Webservice stub中改变endpoint地址
- 如何在WebService中获取客户端的IP地址
- 在Mac OS X中改变NetBeans的默认编码
- webservice 生成 client stub
- 解决webService+axis2生成的wsdl文件有两个Bindings/Endpoint 的问题
- 如何在REPL中运行已有项目中的函数
- 如何在Netbeans 6.0 中设置工程的splash screen
- symantec endpoint protection如何在物理隔绝的网络中升级病毒库
- 在已有项目中创建webservice,调用原有service为null
- NetBeans RCP - 在NetBeans中如何实现GUI Form的国际化
- 如何在NetBeans中设置数据库连接池
- 在 NetBeans IDE 中如何使用 Tomcat
- 如何在netbeans中插入图片背景
- 如何在netbeans中导入eclipse项目?
- 如何在EXCEL中批量生成前面带单引号的数字文本和改变时间格式
- 【原创】在MASM32中使用自己的STUB
- 在webservice中获得客户端的ip地址
- eclipse中安装maven插件(地址已改变)
- 无限级目录的复制函数
- 分词算法应用于重油搜索引擎
- 标准c++ 库
- MSDN简介
- ShootSearch C#开源搜索 0.2发布!
- netbeans中如何在已有生成的Webservice stub中改变endpoint地址
- 使用Microsoft Expression Media Encoder Preview遇到的问题
- 管理者的自省:用三流人才赚一流的钱
- 公布陕国投A(股票代码:000563)阻力(支撑)位
- life's a struggle - 宋岳庭
- 营销2.0时代
- 我也有博客了
- 终于决定总结自己的图像处理库
- 在main函数前后执行代码的方法