javawsdlcxf
㈠ java使用cxf和axis轉換wsdl文件後,兩種方式產生的類,結構、數量是不是相同的
不會的,因為web service是基於soap協議的,所有不管使用那種都是一樣的。
㈡ java cxf動態調用服務端的webservices方法
WebService實現
1、 整個項目使用CXF來實現,在實現的過程中,在MyEclipse中對CXF下lib中的所有jar文件通過引入外部包來處理。
2、 在MyEclipse6.5中可以實現伺服器端和客戶端,但是客戶端在使用wsdl進行動態調用的過程中總是報錯,最後使用MyEclipse9.0實現了進行動態調用的實現。其中發生的錯誤如下:
(1)Exception in thread "main" java.lang.LinkageError: 正在從引導類載入器載入 JAXB 2.1 API, 但此 RI (來自jar:file:/D:/CXF/lib/jaxb-impl-2.2.5.jar!/com/sun/xml/bind/v2/model/impl/ModelBuilder.class) 需要 2.2 API。請使用授權目錄機制將 jaxb-api.jar 放在引導類載入器中。(請參閱 http://java.sun.com/j2se/1.6.0/docs/guide/standards/)
解決辦法:
通過刪除引入包中的jaxb-impl-2.2.5.jar文件可以解決。
(2)java.lang.IllegalArgumentException: Can not set final com.sun.tools.internal.xjc.reader.internalizer.InternalizationLogic field
㈢ 如何使用CXF將 wsdl 文件變成java文件
用myeclipse將wsdl文件生成java代碼:
1、選擇新建的工程後,點擊右鍵,選擇「Run As」->「Run」,如下圖所示:
2、彈出如下窗口:
3、 在上圖中,左邊選擇「Java Application」後,點擊左上角的新增「」按鈕new configuration,頁面如下圖所示:
4、在上圖中,將「Include libraries when searching for a main class」 勾上,而後點擊「Main class」右邊的「Search」按鈕,彈出窗口如下圖所示:
5、在上圖中輸入WSDL2Java後,查找到axis這個jar包中對應類,點擊「OK」按鈕,此時主窗口如下圖所示:
6、在上圖中點擊「Arguments」頁簽,Arguments里把要生成的web service URI或wsdl文件寫進去,最後點run。在下圖中輸入的是wsdl文件的路徑: src/wsdl/acd_accessCode_interface.wsdl、src/wsdl/acd_accessCode_service.wsdl:
7、生成的java代碼如下:
㈣ 怎麼用cxf的wsdl2java解析wcf生成的wsdl
1、下載apache-cxf-2.6.2在環境變數中配置CXF_HOME ,在PATH中加入%CXF_HOME%\bin 2、輸入cmd 進入控制窗口,輸入wsdl2java看是否配置成功
3、參考它的文檔看這個工具的具體參數的用法
wsdl2java用法:
wsdl2java -p com -d src -all aa.wsdl
-p 指定其wsdl的命名空間,也就是要生成代碼的包名:
-d 指定要產生代碼所在目錄
-client 生成客戶端測試web service的代碼
-server 生成伺服器啟動web service的代碼
-impl 生成web service的實現代碼
-ant 生成build.xml文件
-all 生成所有開始端點代碼:types,service proxy,,service interface, server mainline, client mainline, implementation object, and an Ant build.xml file.
詳細用法見:http://cwiki.apache.org/CXF20DOC/wsdl-to-java.html
㈤ 怎麼用cxf的wsdl2java解析wcf生成的wsdl
1、下載apache-cxf-2.6.2在環境變數中配置CXF_HOME ,在PATH中加入%CXF_HOME%\bin 2、輸入cmd 進入控制窗口,輸入wsdl2java看是否配置成功
3、參考它的文檔看這個工具的具體參數的用法
wsdl2java用法:
wsdl2java -p com -d src -all aa.wsdl
-p 指定其wsdl的命名空間,也就是要生成代碼的包名:
-d 指定要產生代碼所在目錄
-client 生成客戶端測試web service的代碼
-server 生成伺服器啟動web service的代碼
-impl 生成web service的實現代碼
-ant 生成build.xml文件
-all 生成所有開始端點代碼:types,service proxy,,service interface, server mainline, client mainline, implementation object, and an Ant build.xml file.
詳細用法見:http://cwiki.apache.org/CXF20DOC/wsdl-to-java.html
㈥ CXF解析svcwsdl文件成java格式
1.安裝JDK1.5,配置系統環境變數:
下載安裝JDK後,設置環境變數:
JAVA_HOME=C:/ProgramFiles/Java/jdk1.5.0_02
Path=%Path%;%JAVA_HOME%/bin(這里的%Path%指你系統已經有的一系列配置)
CLASSPATH=%JAVA_HOME%/lib
2.下載CXF,配置系統環境變數:
CXF下載地址http://cxf.apache.org/download.html
配置環境變數:
CXF_HOME=E:WebServiceCXFapache-cxf-2.1.1apache-cxf-2.1.1(以我的目錄為例)
PATH後追加上「;%CXF_HOME%in」
在cmd命令行中輸入wsdl2java如果顯示其用法表示配置好了。
3.運行命令是:wsdl2javad:documentwebservicehello.wsdl(wsdl的路徑)
4.如果沒有報錯就表示執行成功了,但是執行成功後的java文件生成到什麼地方了?系統沒有提示,當時我就用了一種最笨的方法來找,在整個電腦裡面搜索才找到的,後來我才發現了規律,就是你敲入命令的時候,所處的路徑,肯定就是你文件生成的地方,我當時是cmd直接進入的,
路徑是C:,所以生成的文件也在這個目錄下。
5.新建工程,將生成的java文件和所需要的jar包導入即可。
參考地址:
http://radio123.iteye.com/blog/1134267
㈦ 如何用java調用cxf webservice介面
WebService CXF客戶端報 java.lang.RuntimeException: Cannot create a secure XMLInputFactory 異常,查了許多網路關於該問題的解決辦法,很多都說缺少包問題,但問題是我的包都存在,我用的是apache-cxf-2.7.6,經過不懈努力終於解決了,我的服務端用的是web project,客戶端用的是java project,客戶端jar包是引用其它地方的,後來建一個web project客戶端,把jar直接復制到project的lib目錄下就行了,jdk用的是1.7,客戶端依賴的介面用wsdl2java生成的。
㈧ webservice cxf wsdl2java 生成文件時異常,不恥下問
JAXB+JAX-WS 就可以自動生成的.
JDK 6 已經帶了 JAX-WS 和 JAXB 的實現,一般使用 Apache CXF,要用 AXIS 2 當然也可以了,不過 CXF 是 JAX-WS 的標准實現。
簡單的WSDL例子:
<?xml version="1.0" encoding="UTF-8" ?>
<definitions name="MobilePhoneService"
㈨ cxf的wsdl2java命令和JDK的wsimport命令的區別和使用
JDK提供了一個wsimport.exe的命令,主要是用於將WebService生成客戶端代碼,然後好調用WebService。
wsimport 是根據JDK1.6.0_21及以上的生成本地代碼的,它只能解析伺服器端的SOAP協議為1.1,不能解析SOAP1.2的協議。如果解析SOAP1.2 將會解析不完全。
用法:前提是已經將JDK配置為了path環境變數 C:\Documents and Settings\Administrator>wsimport -s F:\ -p com.client.jdk.wsimport http://localhost:1111/hello?wsdl
-s 後面指定生成文件的路徑,-p 自定義類包 http://localhost:1111/hello?wsdl 是wsdl的路徑。
CXF也提供了根據WSDL生成客戶端代碼的命令wsdl2java.exe 。它是根據jdk1.7生成的本地代碼,所以,需要對生成的代碼做一點點修改。
它可以支持SOAP1.1 和SOAP1.2的協議。前提是你已經下載了Apache CXF 並且將wsdl2java.exe配置為了path環境變數。
用法:C:\Documents and Settings\Administrator>wsdl2java -d F:\ -p com.client.cxf http://localhost:1111/hello?wsdl
-d 後面指定生成文件的路徑,-p 自定義類包 http://localhost:1111/hello?wsdl 是wsdl的路徑。
㈩ java web項目怎麼使用wsdl文件
webservice的發布一般都是使用WSDL(web service descriptive language)文件的樣式來發布的,在WSDL文件裡面,包含這個webservice暴露在外面可供使用的介面。
注意,以下的代碼並沒有經過真正的測試,只是說明這些情況,不同版本的Axis相差很大,最好以apache網站上的例子為准,這里僅僅用於說明其基本用法。
1,直接AXIS調用遠程的web service,直接調用模式如下:
import java.util.Date;
import java.text.DateFormat;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import javax.xml.namespace.QName;
import java.lang.Integer;
import javax.xml.rpc.ParameterMode;
public class caClient {
public static void main(String[] args) {
try {
String endpoint = "http://localhost:8080/ca3/services/caSynrochnized?wsdl";
//直接引用遠程的wsdl文件
//以下都是套路
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(endpoint);
call.setOperationName("addUser");//WSDL裡面描述的介面名稱
call.addParameter("userName", org.apache.axis.encoding.XMLType.XSD_DATE,
javax.xml.rpc.ParameterMode.IN);//介面的參數
call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);//設置返回類型
String temp = "測試人員";
String result = (String)call.invoke(new Object[]{temp});
//給方法傳遞參數,並且調用方法
System.out.println("result is "+result);
}
catch (Exception e) {
System.err.println(e.toString());
}
}
}
2,直接SOAP調用遠程的webservice ,這種模式很少用,但是網路上有人貼出來,也轉過來 :
import org.apache.soap.util.xml.*;
import org.apache.soap.*;
import org.apache.soap.rpc.*;
import java.io.*;
import java.net.*;
import java.util.Vector;
public class caService{
public static String getService(String user) {
URL url = null;
try {
url=new URL("http://192.168.0.100:8080/ca3/services/caSynrochnized");
} catch (MalformedURLException mue) {
return mue.getMessage();
}
// This is the main SOAP object
Call soapCall = new Call();
// Use SOAP encoding
soapCall.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
// This is the remote object we're asking for the price
soapCall.setTargetObjectURI("urn:xmethods-caSynrochnized");
// This is the name of the method on the above object
soapCall.setMethodName("getUser");
// We need to send the ISBN number as an input parameter to the method
Vector soapParams = new Vector();
// name, type, value, encoding style
Parameter isbnParam = new Parameter("userName", String.class, user, null);
soapParams.addElement(isbnParam);
soapCall.setParams(soapParams);
try {
// Invoke the remote method on the object
Response soapResponse = soapCall.invoke(url,"");
// Check to see if there is an error, return "N/A"
if (soapResponse.generatedFault()) {
Fault fault = soapResponse.getFault();
String f = fault.getFaultString();
return f;
} else {
// read result
Parameter soapResult = soapResponse.getReturnValue ();
// get a string from the result
return soapResult.getValue().toString();
}
} catch (SOAPException se) {
return se.getMessage();
}
}
}