java调用wcf控件的两种交互

简介: 1.axis方式 package wsdl.axis; import java.net.MalformedURLException; import java.rmi.RemoteException; import javax.xml.namespace.QName; import javax.xml.rpc.ServiceException; impor
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

目录
相关文章
|
8月前
|
前端开发 JavaScript Java
使用Ajax进行异步交互:提升Java Web应用的用户体验
【4月更文挑战第3天】Ajax技术在Web开发中提升UX,通过与服务器异步交互实现页面局部更新,无需完整刷新。核心组件包括XMLHttpRequest、JavaScript、HTML/CSS及服务器端脚本。在Java Web应用中,可使用原生JavaScript或框架如jQuery、AngularJS实现Ajax请求。Ajax减少页面刷新,实现实时数据更新,即时表单验证和动态UI,显著改善用户体验,是现代Web开发不可或缺的一部分。
101 0
|
12天前
|
移动开发 前端开发 Java
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序,允许开发人员在单个编程接口中组合图形,动画和UI控件。本文详细介绍了JavaFx的常见用法,相信读完本教程你一定有所收获!
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
|
8月前
|
前端开发 Java 容器
Java一分钟之-JavaFX控件:Button, TextField, Label等
JavaFX教程概述了构建UI的基本控件:Button用于用户操作,TextField提供文本输入,Label显示静态文本。文章讨论了样式、事件处理和布局管理常见问题及其解决方案,并提供了一个使用这些控件创建简单应用的代码示例,强调实践中提升GUI开发技能的重要性。
172 1
|
3月前
|
人工智能 缓存 Java
深入解析Spring AI框架:在Java应用中实现智能化交互的关键
【10月更文挑战第12天】Spring AI 是 Spring 框架家族的新成员,旨在满足 Java 应用程序对人工智能集成的需求。它支持自然语言处理、图像识别等多种 AI 技术,并提供与云服务(如 OpenAI、Azure Cognitive Services)及本地模型的无缝集成。通过简单的配置和编码,开发者可轻松实现 AI 功能,同时应对模型切换、数据安全及性能优化等挑战。
249 3
|
5月前
|
前端开发 JavaScript Java
Ajax进行异步交互:提升Java Web应用的用户体验
Ajax 技术允许在不重载整个页面的情况下与服务器异步交换数据,通过局部更新页面内容,极大提升了 Java Web 应用的响应速度和用户体验。本文介绍 Ajax 的基本原理及其实现方式,包括使用 XMLHttpRequest 对象发送请求、处理响应数据,并在 Java Web 应用中集成 Ajax。此外,还探讨了 Ajax 如何通过减少页面刷新、实时数据更新等功能改善用户体验。
86 3
|
6月前
|
缓存 Java 编译器
Java演进问题之JVMCI JIT编译器与JVM的交互如何解决
Java演进问题之JVMCI JIT编译器与JVM的交互如何解决
|
6月前
|
设计模式 安全 Java
Java面试题:设计模式如单例模式、工厂模式、观察者模式等在多线程环境下线程安全问题,Java内存模型定义了线程如何与内存交互,包括原子性、可见性、有序性,并发框架提供了更高层次的并发任务处理能力
Java面试题:设计模式如单例模式、工厂模式、观察者模式等在多线程环境下线程安全问题,Java内存模型定义了线程如何与内存交互,包括原子性、可见性、有序性,并发框架提供了更高层次的并发任务处理能力
95 1
|
6月前
|
存储 设计模式 监控
Java面试题:如何在不牺牲性能的前提下,实现一个线程安全的单例模式?如何在生产者-消费者模式中平衡生产和消费的速度?Java内存模型规定了变量在内存中的存储和线程间的交互规则
Java面试题:如何在不牺牲性能的前提下,实现一个线程安全的单例模式?如何在生产者-消费者模式中平衡生产和消费的速度?Java内存模型规定了变量在内存中的存储和线程间的交互规则
55 0
|
8月前
|
JavaScript 前端开发 测试技术
《手把手教你》系列技巧篇(三十八)-java+ selenium自动化测试-日历时间控件-下篇(详解教程)
【5月更文挑战第2天】在自动化测试过程中,经常会遇到处理日期控件的点击问题。宏哥之前分享过一种方法,但如果输入框是`readonly`属性,这种方法就无法奏效了。不过,通过修改元素属性,依然可以实现自动化填写日期。首先,定位到日期输入框并移除`readonly`属性,然后使用`sendKeys`方法输入日期。这样,即使输入框设置了`readonly`,也能成功处理日期控件。
128 1
|
8月前
|
SQL Java 数据库连接
Java从入门到精通:2.3.1数据库编程——学习JDBC技术,掌握Java与数据库的交互
ava从入门到精通:2.3.1数据库编程——学习JDBC技术,掌握Java与数据库的交互