1.axis方式

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控件的两种交互相关推荐

  1. Java调用ocx控件以及dll

    2019独角兽企业重金招聘Python工程师标准>>> http://lvqingboy-163-com.iteye.com/blog/769358 通过Java调用OCX控件有几种 ...

  2. java调用ocx控件获取数据_Java调用ocx控件以及dll

    通过Java调用OCX控件有几种方法,JNI.JACOB.Jawin等 1.JNI 最直接的方式,也是最麻烦的方式,需要自己完成所有的工作,不推荐. 2.Jawin 尝试了一下,效果不错,但相对来说, ...

  3. excel日历弄到html,Excel中进行添加日历控件的两种方法

    有时我们在运用Excel表格的时候会运用到日历的控件,可是小伙伴们却不知道在哪里添加.那么我们来看一下,它到底躲藏在哪里,又该怎么添加呢?今天,学习啦小编就教大家在Excel中进行添加日历控件的两种方 ...

  4. java调用ocx控件(ActiveX控件),SWT调用ocx(ActiveX)

    java调用ocx控件(ActiveX控件),SWT调用ocx(ActiveX) 注 : OLE.OCX.ActiveX不进行过多阐述,简单理解就是插件,组件类 调用成功,即可展示ocx对应的窗口 ​ ...

  5. HTML中禁用表单控件的两种方法readonly与disabled

    时候我们会希望表单上的控件是不可修改的,比如在修改密码的网页中,显示用户名的文本框就应该是不可修改状态的,下面与大家分享下禁用表中控件的两种方法 在网页的制作过程中,我们会经常使用到表单.但是有时候我 ...

  6. Jsp页面中使用fckeditor控件的两种方法

    fckeditor控件请到官方网站下载[url]http://www.fckeditor.net[/url],本例主要用到FCKeditor_2.6.3.zip.fckeditor-java-demo ...

  7. MFC中访问界面控件的两种方法

    1.在资源中创建一个对话框资源,放置一些控件,然后使用类向导创建一个此对话框类型的变量,项目中会自动创建此对话框的.h和.cpp文件. 有两种方式可在代码中访问控件. (1)如果在代码中直接访问,则使 ...

  8. 红橙Darren视频笔记 一个控件显示两种颜色的文字 画笔的使用

    需求分析 1.一行文字显示两种颜色 2.颜色变化可以从右到左或者从左到右 3.能够随着view pager切换 思路: a.继承View:需要重写onMeasure onDraw方法 b.继承Text ...

  9. 调用WCF返回Josn的两种方式

    开始之前先定义个泛型类和数据对象类型 Code     [DataContract]     public class Product     {         [DataMember]       ...

最新文章

  1. 第k短路 (A*算法)
  2. Makefile中 变量赋值含义
  3. app 图标规格参考表
  4. 各类 动态获取时间,计算距离,贝塞尔曲线等 的方法
  5. 如何区分localhost、127.0.0.1和0.0.0.0等ip地址
  6. mac下svn常用命令
  7. [kuangbin带你飞]专题五 并查集 A - Wireless Network
  8. Cacti+Nagios安装后按自己的相关要求修改相关信息
  9. 1.nagios服务端安装
  10. JAVA学习网站收集
  11. Button的UseSubmitBehavior屬性
  12. 深入分析MVC中通过IOC实现Controller依赖注入的原理
  13. 你想要的短视频音效都在这里!最火爆最热门音效!
  14. 怎么建立局域网_智能电视局域网共享怎么操作?多数品牌都适用的方法!
  15. java中undefined如何解决_处理 JS中 undefined 的 7 个技巧
  16. HTML入门笔记(案例+截图)
  17. Kai Ge - Q绑查询V1.3
  18. congestion_controller、 remote bitrate estimator、pacing模块浅析
  19. 植物大战僵尸修改向日葵无限吐阳光详细步骤~包含排除不符合条件的地址的讲解,以及如何观察地址情况等
  20. 【GPT4】GPT4 官方报告解读

热门文章

  1. 18-chown命令
  2. wxWidgets:wxSetCursorEvent类用法
  3. boost::system模块实现新类别错误代码的创建和使用的测试程序
  4. boost::mpl模块实现single_view相关的测试程序
  5. boost::mp11::mp_product相关用法的测试程序
  6. boost::hana::at用法的测试程序
  7. boost::intrusive::pointer_traits用法的测试程序
  8. boost::geometry::reverse_dispatch用法的测试程序
  9. boost::fusion::as_vector用法的测试程序
  10. boost::gregorian模块实现localization的测试程序