java调用wcf控件的两种交互
package wsdl.axis;
import java.net.MalformedURLException;
import java.rmi.RemoteException;
import javax.xml.namespace.QName;
import javax.xml.rpc.ServiceException;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
public class Test2 {
/**
* @param args
*/
public static void main(String[] args) {
String str = "";
String endpoint = "http://172.50.9.161:4000/Marine/service";
String namespace = "http://www.Service.Marine";
String methodName = "Test2";
Service service = new Service();
Call call = null;
try {
call = (Call) service.createCall();
} catch (ServiceException e1) {
e1.printStackTrace();
}
try {
call.setTargetEndpointAddress(new java.net.URL(endpoint));
} catch (MalformedURLException e1) {
e1.printStackTrace();
}
call.setUseSOAPAction(true);
call.setSOAPActionURI("http://www.Service.Marine/IMarineService/Test2");
call.setOperationName(new QName(namespace, methodName));
call.addParameter(new javax.xml.namespace.QName(namespace, "strTest"),
org.apache.axis.encoding.XMLType.XSD_STRING,
javax.xml.rpc.ParameterMode.IN);// document访问格式,必须
call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);
try {
str = (String) call.invoke(new Object[] { "sss"});
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("服务器返回值是:" + str + "!");
}
}
注意 1)这里需要注意的参数名称问题,java的实参名称要与.net的形参保持一致才能在.net端口接受到。
2)本地静态调用的时候无错误,但是放在web工程下运行,程序返回等都正常,但是java控制台会抛出找不到方法名称的异常。目前还没有找到具体原因
2.cxf方式
package cxf;
import javax.xml.namespace.QName;
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
public class CallDNet {
/**
* @param args
*/
public static void main(String[] args) {
Object[] replys = null;
try {
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory
.newInstance();
Client client = dcf
.createClient("http://127.0.0.1:4000/Marine/service?wsdl");
String namespace = "http://www.Service.Marine";
replys = client.invoke(new QName(namespace, "Test2"), "dsadsadsa");
} catch (Exception e) {
e.printStackTrace();
}
for (Object o : replys) {
// System.out.println(o);
}
System.out.println(replys[0]);
}
}
说明一下,2种jar同时存在一个工程下的时候,需要吧cxf的依赖包放在axis依赖包的前面加载。而且cxf形式的参数限制宽松,不需要对应具体参数名称,而且参数个数多的时候系统也补会报错
3.axis2 调用方式
package client;
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axis2.AxisFault;
import org.apache.axis2.Constants;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.client.ServiceClient;
public class Axis2ServiceClient {
public static void main(String[] args) throws AxisFault {
EndpointReference targetEPR = new EndpointReference("http://172.50.9.159:4000/Marine/service?wsdl");
OMFactory fac = OMAbstractFactory.getOMFactory();
OMNamespace omNs = fac.createOMNamespace("http://www.Service.Marine", "tns");//命名空间
OMElement method2 = fac.createOMElement("Test2", omNs);//要调用的接口方法名称
OMElement value1 = fac.createOMElement("strTest", omNs);//方法的第一个参数名称
value1.addChild(fac.createOMText(value1, "ccc"));//设定参数的值
method2.addChild(value1);//方法设置参数
Options options = new Options();
options.setAction("http://www.Service.Marine/IMarineService/Test2");
options.setTo(targetEPR);//设定webservice地址
options.setTransportInProtocol(Constants.TRANSPORT_HTTP);//设定传输协议
ServiceClient sender = new ServiceClient();
sender.setOptions(options);
OMElement result2 = sender.sendReceive(method2);//调用接口方法
System.out.println(result2);//打印接口返回结果
}
}
最少依赖jar
java调用wcf控件的两种交互相关推荐
- Java调用ocx控件以及dll
2019独角兽企业重金招聘Python工程师标准>>> http://lvqingboy-163-com.iteye.com/blog/769358 通过Java调用OCX控件有几种 ...
- java调用ocx控件获取数据_Java调用ocx控件以及dll
通过Java调用OCX控件有几种方法,JNI.JACOB.Jawin等 1.JNI 最直接的方式,也是最麻烦的方式,需要自己完成所有的工作,不推荐. 2.Jawin 尝试了一下,效果不错,但相对来说, ...
- excel日历弄到html,Excel中进行添加日历控件的两种方法
有时我们在运用Excel表格的时候会运用到日历的控件,可是小伙伴们却不知道在哪里添加.那么我们来看一下,它到底躲藏在哪里,又该怎么添加呢?今天,学习啦小编就教大家在Excel中进行添加日历控件的两种方 ...
- java调用ocx控件(ActiveX控件),SWT调用ocx(ActiveX)
java调用ocx控件(ActiveX控件),SWT调用ocx(ActiveX) 注 : OLE.OCX.ActiveX不进行过多阐述,简单理解就是插件,组件类 调用成功,即可展示ocx对应的窗口 ...
- HTML中禁用表单控件的两种方法readonly与disabled
时候我们会希望表单上的控件是不可修改的,比如在修改密码的网页中,显示用户名的文本框就应该是不可修改状态的,下面与大家分享下禁用表中控件的两种方法 在网页的制作过程中,我们会经常使用到表单.但是有时候我 ...
- Jsp页面中使用fckeditor控件的两种方法
fckeditor控件请到官方网站下载[url]http://www.fckeditor.net[/url],本例主要用到FCKeditor_2.6.3.zip.fckeditor-java-demo ...
- MFC中访问界面控件的两种方法
1.在资源中创建一个对话框资源,放置一些控件,然后使用类向导创建一个此对话框类型的变量,项目中会自动创建此对话框的.h和.cpp文件. 有两种方式可在代码中访问控件. (1)如果在代码中直接访问,则使 ...
- 红橙Darren视频笔记 一个控件显示两种颜色的文字 画笔的使用
需求分析 1.一行文字显示两种颜色 2.颜色变化可以从右到左或者从左到右 3.能够随着view pager切换 思路: a.继承View:需要重写onMeasure onDraw方法 b.继承Text ...
- 调用WCF返回Josn的两种方式
开始之前先定义个泛型类和数据对象类型 Code [DataContract] public class Product { [DataMember] ...
最新文章
- 第k短路 (A*算法)
- Makefile中 变量赋值含义
- app 图标规格参考表
- 各类 动态获取时间,计算距离,贝塞尔曲线等 的方法
- 如何区分localhost、127.0.0.1和0.0.0.0等ip地址
- mac下svn常用命令
- [kuangbin带你飞]专题五 并查集 A - Wireless Network
- Cacti+Nagios安装后按自己的相关要求修改相关信息
- 1.nagios服务端安装
- JAVA学习网站收集
- Button的UseSubmitBehavior屬性
- 深入分析MVC中通过IOC实现Controller依赖注入的原理
- 你想要的短视频音效都在这里!最火爆最热门音效!
- 怎么建立局域网_智能电视局域网共享怎么操作?多数品牌都适用的方法!
- java中undefined如何解决_处理 JS中 undefined 的 7 个技巧
- HTML入门笔记(案例+截图)
- Kai Ge - Q绑查询V1.3
- congestion_controller、 remote bitrate estimator、pacing模块浅析
- 植物大战僵尸修改向日葵无限吐阳光详细步骤~包含排除不符合条件的地址的讲解,以及如何观察地址情况等
- 【GPT4】GPT4 官方报告解读
热门文章
- 18-chown命令
- wxWidgets:wxSetCursorEvent类用法
- boost::system模块实现新类别错误代码的创建和使用的测试程序
- boost::mpl模块实现single_view相关的测试程序
- boost::mp11::mp_product相关用法的测试程序
- boost::hana::at用法的测试程序
- boost::intrusive::pointer_traits用法的测试程序
- boost::geometry::reverse_dispatch用法的测试程序
- boost::fusion::as_vector用法的测试程序
- boost::gregorian模块实现localization的测试程序