.Net調用Java的實現方法

一. 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

可在ikvm路徑目錄下查看生成的.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界面中輸入命令,轉到ikvm.exe應用程序的目錄下;

同時將要轉化的.jar文件(例如ikvm.jar文件)放到目錄下,輸入命令,將ikvm.jar文件轉換成**.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

 搭建Java版WebService 

 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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章