一. IKVM

1.1下载配置IKVM

1.1.1. 下载路径

http://www.ikvm.net/index.html

1.1.2. 设置路径

解压ikvm-0.42.0.3.zip,并将%IKVM_HOME%/bin添加到path中。此处的%IKVM_HOME%是指解压后ikvm的主目录。

1.2第一种方式:直接将.class文件转化成.dll

网站介绍

http://www.codeproject.com/Articles/13549/Using-Java-Classes-in-your-NET-Application

在Dos界面中输入命令,转到ikvm.exe应用程序的目录下;

同时将要转化的.class文件(例如testmain.class文件)放到目录下,在dos里输入以下命令:

ikvmc<空格>–target:library<空格>testmain.class

可在C:\Program Files\ikvm\bin目录下查看生成的.dll文件

链接介绍节目如下:

1.3第二种方式:将Java的项目的jar包转化成.dll

c#直接调用java代码,需要ikvmbin-0.44.0.5.zip

1. 下载并解压

2. 配置环境变量:

在path中添加%IKVM_HOME%\bin,IKVM_HOME为解压后的IKVM的主目录。在dos界面,输入"ikvm"命令,测试是否配置成功

3. 编写java代码(java代码,要放在指定的package下,不要放在默认包下):

 1 package com.xyy.csharp;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 
 6 public class TestMain {
 7 
 8     //获得集合
 9     public List<Demo1> getLists(){
10         List<Demo1> lst=new ArrayList<Demo1>();
11         Demo1 d=new Demo1();
12         d.setId(1);
13         d.setName("admin");
14         Demo1 d2=new Demo1();
15         d2.setId(2);
16         d2.setName("sa");
17         
18         lst.add(d);
19         lst.add(d2);
20         return lst;
21     }
22     
23     //获得字符串
24     public String getString(){
25         return "我是字符串";
26     }
27     
28     //获得对象
29     public Demo1 getObject(){
30         Demo1 demo=new Demo1();
31         demo.setId(1);
32         demo.setName("admin");
33         return demo;
34     }
35     
36     //获得boolean
37     public boolean getBoolean(){
38         return Boolean.TRUE;
39     }
40     
41     //在控制台输出
42     public void SystemOutPrint(){
43         System.out.println("我是控制台输出语句");
44     }
45 }

5. 将java项目打成jar包(test.jar),打包过程详见备注:

6. 在Dos界面中输入命令,CD表示改变当前目录,转到ikvm.exe应用程序的目录下;

同时将要转化的.jar文件(例如ikvm.jar文件)放到目录下,输入命令,将ikvm.jar文件转换成zhou.dll文件:

Ikvm命令格式:ikvmc<空格>-out:aaa.dll<空格>bbb.jar

其中:bbb.jar表示要转化的.jar文件,aaa.dll表示要生成的.dll文件名。

7. 新建c#项目,引入以下三个dll:

%IKVM_HOME%\bin\IKVM.OpenJDK.Core.dll

%IKVM_HOME%\bin\IKVM.Runtime.dll

%IKVM_HOME%\bin\IKVM.Runtime.JNI.dll

引入刚刚打包的IKVM.dll

8.

9. 输出结果:

10. c#不能直接接收java返回的集合,这里就没深入研究了

备注:将JAVA项目打包成jar包过程

http://www.cnblogs.com/myCodingSky/p/3347511.html

java项目打jar包分为2种情况:

一、java项目没有导入第三方jar包

1.
首先在Eclipse中打开项目, 右键点击项目,选择“Export”;

2. 选择Java/JAR file,Next;

3. Select the resources to export中可以选择你想要包含的项目文件夹,一些不必要的文件夹就无需放进去了,免得增大空间;

这里有几个选项:

 *
Export generated class
files and resources 表示只导出生成的.class文件和其他资源文件

 * Export all output folders for checked projects 表示导出选中项目的所有文件夹

 * Export java source file and resouces 表示导出的jar包中将包含你的源代码*.java,如果你不想泄漏源代码,那么就不要选这项了

 * Export refactorings for checked projects 把一些重构的信息文件也包含进去

在Select
the export destination中选择导出的jar的路径,Next

4. 下一页可以选择是否导出那些含有警告warning或者错误errors的*.class文件。一般不用理他,Next

5. 下一个页面里可以对项目做一些配置。(如果项目没有引入第三方jar包,这项我们采用系统默认的选项就OK,Main
class一定要设置成为你项目的那个主方法入口类)

 * Generate the manifest file
是系统帮我们自动生成MANIFEST.MF文件,如果你的项目没有引用其他class-path,那可以选择这一项。

 * Use existing mainfest from workspace 这是可以选择我们自定义的.MF文件,格式如上所写。

 * Seal content 要封装整个jar或者指定的包packet

 * Main class 这里可以选择你的程序入口,将来打包出来的jar就是你这个入口类的执行结果。

最后Finish,搞定。
......

二、 java项目有导入第三方Jar包(例如项目中有导入sqlserver2005.jar包)

这时候打包就相对复杂一点:

前面的4步和上面的情况是一样,只是第5步需要选择Use
existing mainfest from workspace选项,并选择你自己创建的一个MANIFEST. MF文件,因为系统默认选择的是Generate the manifest file选项,而该选项不会将项目用到得第三方jar包打入到java项目生成的jar包中去。

自定义配置文件MANIFEST.MF :

首先在项目的根目录下创建一个MANIFEST.MF文件

接下来用记事本打开该文件,并编辑:

例如:

Manifest-Version: 1.0

Main-Class: StudentManager_Test

Class-Path: sqlserver2005.jar

其中的Manifest-Version是指程序的版本号,Main-Class是指程序的主方法入口类,slass-Path就指定了外来jar包的位置。请注意假设我们的项目打包后为project.jar,那么按照上面的定义,应该在 project.jar的同层目录下有相关的jar包(即sqlserver2005.jar,如果有引入多个第三方jar包,则可以用空格隔开)放在里面。否则将会出现Exception in thread "main"
java.lang.NoClassDefFoundError的错误。

二. Web Service

 搭建JavaWebService

2.1什么是WebServices

它是一种构建应用程序的普遍模型,可以在任何支持网络通信的操作系统中实施运行;它是一种新的Web应用程序分支,是自包含、自描述、模块化的应用,可以发布、定位、通过Web调用。Web Service是一个应用组件,它逻辑性的为其他应用程序提供数据与服务.各应用程序通过网络协议和规定的一些标准数据格式(Http,XML,Soap)来访问Web Service,通过Web Service内部执行得到所需结果.Web Service可以执行从简单的请求到复杂商务处理的任何功能。一旦部署以后,其他Web Service应用程序可以发现并调用它部署的服务。

关键的技术和规则

在构建和使用Web Service时,主要用到以下几个关键的技术和规则:

1.XML: 描述数据的标准方法.

2.SOAP: 表示信息交换的协议.

3.WSDL: Web服务描述语言.

4.UDDI: 通用描述、发现与集成,它是一种独立于平台的,基于XML语言的用于在互联网上描述商务的协议。

XML

可扩展的标记语言(XML)是Web Service平台中表示数据的基本格式。除了易于建立和易于分析外,XML主要的优点在于它既是平台无关的,又是厂商无关的。无关性是比技术优越性更重要的:软件厂商是不会选择一个由竞争对手所发明的技术的。

SOAP

SOAP是Web Service的标准通信协议,SOAP为simple object
access protocoll的缩写,简单对象访问协议. 它是一种标准化的传输消息的XML消息格式。

WSDL

WSDL的全称是web service Description Language,是一种基于XML格式的关于web服务的描述语言。其主要目的在于web service的提供者将自己的web服务的所有相关内容,如所提供的服务的传输方式,服务方法接口,接口参数,服务路径等,生成相应的完全文档,发布给使用者。使用者可以通过这个WSDL文档,创建相应的SOAP请求消息,通过HTTP传递给webservice提供者;web服务在完成服务请求后,将SOAP返回消息传回请求者,服务请求者再根据WSDL文档将SOAP返回消息解析成自己能够理解的内容。

UDDI

将web service进行UDDI注册发布,UDDI是一种创建注册表服务的规范,以便大家将自己的web service进行注册发布供使用者查找.然而当服务提供者想将自己的web service向全世界公布,以便外部找到其服务时,那么服务提供者可以将自己的web service注册到相应的UDDI商用注册网站,目前全球有IBM等4家UDDI商用注册网站。因为WSDL文件中已经给定了web service的地址URI,外部可以直接通过WSDL提供的URI进行相应的web service调用。所以UDDI并不是一个必需的web service组件,服务方完全可以不进行UDDI的注册。

2.2 创建并发布自己的Web
Service

1  安装MyEclipse

2  配置Tomcat

打开MyEclipse

菜单栏 –> File –>
New –> Web Service Project

在这里,我们使用JAX-WS方式

JAX-WS

Jax-WS是Java1.6中才有的,新的Web Service模式,基于注解的方式配置Web Service,很类似Asp中的Web Service,难度已经比Xfire方式的配置降低了很多.

REST(JAX-RS)

用的比较少

Xfire(已过时)

配置比较繁琐

创建Service中的包及类库,实现自己的业务。

我们创建的是一个用户管理系统,自然需要来管理用户。

发布Web Service

到此WS发布完成,接下来配置TomCat

在弹出的窗体中依次展开 MyEclipse
->Servers –>Tomcat

对着项目右击添加库文件

到此,所有步骤都以配置完毕 开始部署

启动TomCat

在工具栏中找到部署图标

部署完成,打开IE进行测试

2.3创建客户端进行测试

此时,项目中将会生成WS所需的类库文件

创建一个调用测试类

到此,我们的Web Service就配置+测试完毕了。其实并不难,就算步骤比较多,比较繁琐,容易忘记,可以当一个备忘录吧,方便以后翻阅!

参考资料:http://www.cnblogs.com/lanxuezaipiao/p/3291641.html

http://blog.csdn.net/hehainan_86/article/details/28621989

.Net调用Java的实现方法的更多相关文章

  1. oracle调用JAVA类的方法

    导入jar包 在oracle中导入需要的jar包,我们把编辑好的java类打成jar包,直接在oarcle里面写简单的调用就可以了,  1.操作系统需要拥有支持loadjava命令的jdk.  2.加 ...

  2. 如何在Mybatis的xml文件调用java类的方法

    在mybatis的映射xml文件调用java类的方法:使用的是OGNL表达式,表达式格式为:${@prefix@methodName(传递参数名称)} 1.如下代码所示:方法必须为静态方法:以下我只是 ...

  3. C#实现调用Java类中方法

    基本思路: 用C#实现调用Java编写的类中的方法:重点是将Java编写的程序打包成Jar,然后使用开源工具IKVM将其转化成DLL控件,在.NET环境下调用. 分为以下步骤: 1.下载JDK6(注: ...

  4. .NET调用JAVA的WebService方法

    调用WebService,最简单的办法当然是直接添加WEB引用,然后自动产生代理类,但是在调用JAVA的WebService时并没有这么简单,特别是对于SoapHeader的处理,在网上也有相关资料, ...

  5. delphi xe6 调用java GPS的方法

    如果用xe6自带的LocationSensor控件,默认优先使用网络位置,网络位置定位精度不准确,不能满足高精度定位的要求.但xe6自带的LocationSensor控件不能指定网络定位优先还是GPS ...

  6. JNI C反射调用java方法

    前面记录了调用C的学习笔记,现在来记录一下C反射调用Java的笔记.JNI开发学习之调用C方法 Android开发中调用一个类中没有公开的方法,可以进行反射调用,而JNI开发中C调用java的方法也是 ...

  7. 在c/c++中调用Java方法

    JNI就是Java Native Interface, 即可以实现Java调用本地库, 也可以实现C/C++调用Java代码, 从而实现了两种语言的互通, 可以让我们更加灵活的使用. 通过使用JNI可 ...

  8. Android-WebView与本地HTML (HTML调用-->Java的方法)

    上一篇博客 Android-WebView加载网络图片&网页 介绍了 使用WebView去加载网络上的图片与网页; 此篇博客专门介绍 Android-WebView与本地HTML (HTML调 ...

  9. java native interface JNI 调用Java方法

    在上一篇文章中介绍了JNI.以及java调用JNI.这篇讲一下 JNI调用java方法. 通过使用合适的JNI函数,你能够创建Java对象,get.set 静态(static)和 实例(instanc ...

随机推荐

  1. 2021.10.18考试总结[NOIP模拟76]

    T1 洛希极限 不难发现每个点肯定是被它上一行或上一列的点转移.可以预处理出每个点上一行,上一列最远的能转移到它的点,然后单调队列优化. 预处理稍显ex.可以用并查集维护一个链表,记录当前点之后第一个 ...

  2. Golang通脉之并发初探

    并发是编程里面一个非常重要的概念,Go语言在语言层面天生支持并发. 并发与并行 并发:同一时间段内执行多个任务. 并行:同一时刻执行多个任务,有时间上的重叠. 进程.线程.协程 进程(Process) ...

  3. systemverilog 字符串类型

    转载:https://blog.csdn.net/Holden_Liu/article/details/100727957 传统的Veriog仅仅支持文字表述上的字符串, 而SystemVerilog ...

  4. wpa_supplicant启动出错rfkill: Cannot open RFKILL control device

    在板子是调试网络,千辛万苦把wpa_supplicant及其依赖都移植编译进来了,在板子上调试启动的时候启动报错了 D/wpa_supplicant( 1152): wpa_supplicant v2 ...

  5. python教程-(四)当索引行不通时(python字典)

    一.创建和使用字典 1.函数dict #字典表示方式如下 >>> phonebook = {'tom':'18616271234',"Jim":"186 ...

  6. windows 系统文件夹挂载到 Linux 系统,拷贝(发送)文件到 windows 系统,实现异地备份

    1.在windows 系统上配置好共享文件夹,用来接收Linux 系统的文件   注意:关闭windows 系统防火墙,或者添加进出站规则 2.在Linux 系统中,创建需要拷贝的文件目录 #mkdi ...

  7. [转]技术往事:改变世界的TCP/IP协议

    原文链接 : http://www.52im.net/thread-520-1-1.html 1.前言 作为应用层开发人员,接触最多的网络协议通常都是传输层的TCP(与之同处一层的另一个重要协议是UD ...

  8. LeetCode刷题 树专题

    树专题 关于树的几个基本概念 1 树的节点定义 2 关于二叉树的遍历方法 2.1 前序遍历 2.2 中序遍历 2.3 后序遍历 2.4 层序遍历 3 几种常见的树介绍 3.1 完全二叉树 3.2 二叉 ...

  9. 【JAVA】编程(1)---计算器

    作业要求: 制作一个简易计算器,支持加,减,乘,除,取余五则运算:支持小数运算:一次运行支持无限次运算:可以人为控制程序的结束: import java.util.*; public class 计算 ...

  10. 浏览器调用接口正常,jmeter调不通的可能原因

    首先,还是http状态码介绍(网上都能找到这些简介): 1xx 信息,服务器收到请求,需要请求者继续执行操作 2xx 成功,操作被成功接收并处理 3xx 重定向,需要进一步的操作以完成请求 4xx 客 ...