當前位置:首頁 » 密碼管理 » java訪問webservice

java訪問webservice

發布時間: 2022-06-21 04:59:20

A. java 怎樣調用本地webservice

WebService是基於Web的服務,WebService使用SOAP協議實現跨編程語言和跨操作系統平台,接收和響應外部系統的某種請求,從而實現遠程調用。WebService採用HTTP協議傳輸數據,採用XML格式封裝數據,SOAP協議=HTTP協議+XML數據格式。主要解決不了不同的系統或者調用分布部署的處理數據項目返回的介面。第一種,採用httpclient請求,這種跟經常用的HTTP請求一樣,結果可以是返回XML格式的字元串,比較容易對其進行解析,取得想要的數據。

B. Java調用webservice和postmain調用的區別

區別是WebService可以有Get、Post、Soap、Document四種方式調用。
我們可以把webservice看做是web伺服器上的一個應用,web伺服器是webservice的一個容器。通過wximport生成代碼。通過客戶端編程方式。
通過URLConnection方式調用。

C. 現在java調用webservice是用什麼技術

JAVA調用WS介面現在用的比較多就是AXIS和CXF了最早的時候是使用AXIS的比較多,因為這個是最早支持JAVA的WS介面的,像ECLIPSE里都自帶了AXIS,然後因為AXIS很久沒有更新了,這時候CXF慢慢進入大家眼中CXF的介面實現起來更簡單,和其它語言實現的介面互相調用的時候兼容性也很好,再加上還有REST可以更簡單的訪問資源,現在很多新項目都會考慮用CXF,但是有很多老項目還是用的AXIS,如果維護的話也得能看懂,所以還是可以兩個都應該學學,必竟就是實現的方式有些不同而已,原理都是差不多的關於CXF這個我之前找到一個哥們寫的一些很不錯的筆記,如果有興趣的話你可以去參考參考 294324現在java調用webservice是用什麼技術?

D. java如何調用webservice介面

Java通過WSDL文件來調用webservice直接調用模式如下:

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());

}

}

}

E. java 如何實現webservice 怎麼調用介面

一、利用jdkweb服務api實現,這里使用基於SOAPmessage的Web服務

①.首先建立一個WebservicesEndPoint:packageHello;
importjavax.jws.WebService;
importjavax.jws.WebMethod;
importjavax.xml.ws.Endpoint;
@WebService
publicclassHello{
@WebMethod
publicStringhello(Stringname){
return"Hello,"+name+" ";
}
publicstaticvoidmain(String[]args){
//createandpublishanendpoint
Hellohello=newHello();
Endpointendpoint=Endpoint.publish("


,hello);
}
}
②.使用apt編譯Hello.java(例:apt-d[存放編譯後的文件目錄]Hello.java),
會生成jaws目錄
③.使用javaHello.Hello運行,然後將瀏覽器指向


就會出現下列顯示
④.使用wsimport生成客戶端使用如下:
wsimport-p.-keep


這時,會在當前目錄中生成如下文件:
⑤.客戶端程序:
1classHelloClient{
2publicstaticvoidmain(Stringargs[]){
3HelloServiceservice=newHelloService();
4HellohelloProxy=service.getHelloPort();
5Stringhello=helloProxy.hello("你好");
6System.out.println(hello);
7}
8}

以上方法還稍顯繁瑣,還有更加簡單的方法


二、使用xfire,我這里使用的是myeclipse集成的xfire進行測試的利用xfire開發WebService,可以有三種方法:

1. 一種是從javabean中生成;

2.一種是從wsdl文件中生成;

3. 還有一種是自己建立webservice

步驟如下:

用myeclipse建立webservice工程,目錄結構如下:首先建立webservice介面,

代碼如下:

1packagecom.myeclipse.wsExample;
2//GeneratedbyMyEclipse
3
{
5
6publicStringexample(Stringmessage);
7
8}
接著實現這個借口:
1packagecom.myeclipse.wsExample;
2//GeneratedbyMyEclipse
3
{
5
6publicStringexample(Stringmessage){
7returnmessage;
8}
9
10}



修改service.xml文件,加入以下代碼:

1<service>
2<name>HelloWorldService</name>
3<serviceClass>
4com.myeclipse.wsExample.IHelloWorldService
5</serviceClass>
6<implementationClass>
7com.myeclipse.wsExample.HelloWorldServiceImpl
8</implementationClass>
9<style>wrapped</style>
10<use>literal</use>
11<scope>application</scope>
12</service>


把整個項目部署到tomcat伺服器中打開瀏覽器,輸入http://localhost:8989/HelloWorld/services/HelloWorldService?wsdl,可以看到如下:

然後再展開HelloWorldService後面的wsdl可以看到:

客戶端實現如下:

1packagecom.myeclipse.wsExample.client;
2
3importjava.net.MalformedURLException;
4importjava.net.URL;
5
6importorg.codehaus.xfire.XFireFactory;
7importorg.codehaus.xfire.client.Client;
8importorg.codehaus.xfire.client.XFireProxyFactory;
9importorg.codehaus.xfire.service.Service;
10importorg.codehaus.xfire.service.binding.ObjectServiceFactory;
11
12importcom.myeclipse.wsExample.IHelloWorldService;
13
14publicclassHelloWorldClient{
15publicstaticvoidmain(String[]args)throwsMalformedURLException,Exception{
16//TODOAuto-generatedmethodstub
17Services=newObjectServiceFactory().create(IHelloWorldService.class);
18XFireProxyFactoryxf=newXFireProxyFactory(XFireFactory.newInstance().getXFire());
19Stringurl="

20
21try
22{
23
24IHelloWorldServicehs=(IHelloWorldService)xf.create(s,url);
25Stringst=hs.example("zhangjin");
26System.out.print(st);
27}
28catch(Exceptione)
29{
30e.printStackTrace();
31}
32}
33
34}

有時候我們知道一個wsdl地址,比如想用java客戶端引用net做得webservice,使用myeclipse引用,但是卻出現無法通過驗證的錯誤,這時我們可以直接在類中引用,步驟如下:

1.publicstaticvoidmain(String[]args)throwsMalformedURLException,Exception{
2.//TODOAuto-generatedmethodstub



F. java如何調用webservice介面

Java通過WSDL文件來調用webservice:

注意,以下的代碼並沒有經過真正的測試,只是說明這些情況,不同版本的Axis相差很大,大家最好以apache網站上的例子為准,這里僅僅用於說明其基本用法。
1,直接AXIS調用遠程的web service
這種方法比較適合那些高手,他們能直接看懂XML格式的WSDL文件,我自己是看不懂的,尤其我不是專門搞這行的,即使一段時間看懂,後來也就忘記了。直接調用模式如下:
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();
}
}
}
3,使用wsdl2java把WSDL文件轉成本地類,然後像本地類一樣使用,即可。
這是像我這種懶人最喜歡的方式,仍然以前面的global weather report為例。
首先 java org.apache.axis.wsdl.WSDL2Java http://www.webservicex.net/globalweather.asmx.WSDL
原本的網址是http://www.webservicex.net/globalweather.asmx?WSDL,中間個各問號,但是Linux下面它不能解析,所以去掉問號,改為點號。
那麼就會出現4個文件:
GlobalWeather.java GlobalWeatherLocator.java GlobalWeatherSoap.java GlobalWeatherSoapStub.java
其中GlobalWeatherSoap.java是我們最為關心的介面文件,如果你對RMI等SOAP實現的具體細節不感興趣,那麼你只需要看介面文件即可,在使用的時候,引入這個介面即可,就好像使用本地類一樣。

G. java調用webservice介面具體怎麼調用

Java調用WebService可以直接使用Apache提供的axis.jar自己編寫代碼,或者利用Eclipse自動生成WebService Client代碼,利用其中的Proxy類進行調用。理論上是一樣的,只不過用Eclipse自動生成代碼省事些。 1、編寫代碼方式: package com.yun.test; import java.rmi.RemoteException; import org.apache.axis.client.Call; import org.apache.axis.client.Service; import org.apache.axis.message.PrefixedQName; import org.apache.axis.message.SOAPHeaderElement; import com.cezanne.golden.user.Exception; import com.cezanne.golden.user.UserManagerServiceProxy; import javax.xml.namespace.QName; import java.net.MalformedURLException; import javax.xml.rpc.ServiceException; import javax.xml.soap.Name; import javax.xml.soap.SOAPException; public class testWebService { public static String getResult() throws ServiceException, MalformedURLException, RemoteException, SOAPException { //標識Web Service的具體路徑 String endpoint = "WebService服務地址"; // 創建 Service實例 Service service = new Service(); // 通過Service實例創建Call的實例 Call call = (Call) service.createCall(); //將Web Service的服務路徑加入到call實例之中. call.setTargetEndpointAddress( new java.net.URL(endpoint) );//為Call設置服務的位置 // 由於需要認證,故需要設置調用的SOAP頭信息。 Name headerName = new PrefixedQName( new QName("發布的wsdl里的targetNamespace里的url", "string_itemName") ); org.apache.axis.message.SOAPHeaderElement header = new SOAPHeaderElement(headerName); header.addTextNode( "blablabla" ); call.addHeader(header); // SOAPHeaderElement soapHeaderElement = new SOAPHeaderElement("發布的wsdl里的targetNamespace里的url", "SoapHeader"); // soapHeaderElement.setNamespaceURI("發布的wsdl里的targetNamespace里的url"); // try // { // soapHeaderElement.addChildElement("string_itemName").setValue("blablabla"); // } // catch (SOAPException e) // { // e.printStackTrace(); // } // call.addHeader(soapHeaderElement); //調用Web Service的方法 org.apache.axis.description.OperationDesc oper; org.apache.axis.description.ParameterDesc param; oper = new org.apache.axis.description.OperationDesc(); oper.setName("opName"); param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "arg0"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"), java.lang.String.class, false, false); param.setOmittable(true); oper.addParameter(param); param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "arg1"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"), java.lang.String.class, false, false); param.setOmittable(true); oper.addParameter(param); param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "arg2"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"), java.lang.String.class, false, false); param.setOmittable(true); oper.addParameter(param);

H. java調用webservice訪問時,有iis認證怎麼解決

WebServiceSoap wsoap=new WebService().getPort(new QName("http://xxx.xxx.xxx/webservice/",
"WebServiceSoap"), WebServiceSoap.class);

BindingProvider bp=(BindingProvider)wsoap;
Map<String,Object> context=bp.getRequestContext();
context.put(BindingProvider.USERNAME_PROPERTY, "username");
context.put(BindingProvider.PASSWORD_PROPERTY, "password");
String userinfo=wsoap.getInfo("id");
我之前有在網上找到這種代碼
這種在new WebService()之後再添加用戶名和密碼信息的方法,會跟上面一樣,實例化webservice的時候就會報錯無法訪問

I. java Webservice都有哪幾種方式啊,哪種方式比較好啊

webservice的應用已經越來越廣泛了,下面介紹幾種在Java體系中開發webservice的方式,相當於做個記錄。
1.Axis2
Axis是apache下一個開源的webservice開發組件,出現的算是比較早了,也比較成熟。這里主要介紹Axis+eclipse開發webservice,當然不用eclipse也可以開發和發布webservice,只是用eclipse會比較方便。

(1)下載eclipse的Java EE版本

(2)下載axis2

(3)下載eclipse的axis2插件
Axis2_Codegen_Wizard
Axis2_Service_Archiver

推薦使用1.3的版本

(4)eclipse安裝axis2插件
1)在任意目錄下新建一個Axis2文件夾,在該文件夾下新建eclipse目錄,在eclipse目錄中新建plugins目錄和features目錄,例如:D:\programSoftware\eclipse-SVN\Axis2\eclipse;
2)把下載的axis2插件解壓,並把解壓的文件放到新建的eclipse的plugins目錄下;
3)在%eclipse_home%的目錄下新建links目錄,並在links目錄下新建axis2.link文件,內容為:path=D:\programSoftware\eclipse-SVN\Axis2;
4)重啟eclipse,點擊·file-new-other,如果看到Axis2 Wizards,則表明插件安裝成功。

(5)安裝axis2

(6)使用eclipse新建web工程,創建一個普通java類,至少包含一個方法。

(7)發布webservice
1)點擊eclipse的File-New-other,打開Axis2 Wizards,選擇Axis2 Service Archiver,然後Next;
2)選擇Class File Location,也就是類文件存放路徑,注意:只選到classes目錄,不要包括包文件夾,然後Next;
3)選擇Skip WSDL,然後Next
4)一路Next到Select the Service XML file to be included in the Service archive,勾選Generate theservice xml automatically;
5)Service Name-填寫你的service名稱,Class Name-填寫類名稱,要包括包名,然後點擊load,然後點擊Finish,這時webservice就發布成功了;
6)然後到%TOMCAT_HOME%/webapps/axis2/WEB-INF/services 看看是否多了一個.aar的文件;

注意:以上的方式是發布到axis2.war包中,你也可以把生成.aar文件到你的實際應用中,同時,你也可以使用eclipse的create webservice功能發布你的webservice,選擇axis2生成你的webservice,這樣webservice就會部署到你的應用中了。

2.Apche CXF
CXF開發webservice也是比較方便和簡單的,它和spring的集成可以說是非常地好。舉一個CXF開發webservice的例子吧。
1)在eclipse中新建一個web工程,導入依賴包,如圖:

2)編寫一個介面,如:

注意:CXF開發的webservice,介面中的方法的參數一定要以這種方式,否則客戶端調用的時候CXF服務端會接收不到參數的值,name:參數名稱,可不寫(建議寫上),targetNamespace:命名空間,一定要填寫上,默認是包名反過來的順序,mode:參數類型,IN表示輸入。
3)編寫一個實現類,實現介面的方法;
4)和spring的集成,編寫一個bean文件,如:cxf-beans.xml,內容如下:

Cxf-beans.xml代碼
<?xml version="1.0" encoding="UTF-8" ?>

<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />

<jaxws:endpoint id="vote" implementor="com.zcl.cxf.service.VoteImpl" address="/Vote" />
</beans>
這個文件比較容易理解,就不解釋了。
5)配置CXFServlet
在web.xml文件中配置CXFServlet,載入cxf-beans.xml文件,內容如下:

Web.xml代碼

id="WebApp_ID" version="2.5">

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/cxf-beans.xml</param-value>
</context-param>

<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<servlet>
<servlet-name>cxf</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>cxf</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
</web-app>
把工程部署到中間件,如tomcat,就可以訪問該webservice了。

3.JDK開發webservice
1)編寫一個Java類,如下:

Jdkwebservice.java代碼
package demo;

import javax.jws.WebParam;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;

@WebService
public class JdkWebService {

return "Just do it," + value + "!";
}

public static void main(String[] args) {

}
}
2)運行該java類,在瀏覽器上就可以訪問該webservice了。
注意:開發web工程的時候,這種方法不太友好。我們可以編寫一個servlet類,在servlet類的初始化方法中發布webservice,這樣我們的中間件伺服器啟動的時候就會幫我們自動webservice了。

4) xfire
開發WebService的框架不少,每個框架都有各自的有點,最近我用xfire練習開發WebService,下面是開發WebService的小例子,希望對入門的人有些小幫助
1.新建一個java web project命名為TestWebService,將xfire相關的jar包添加到lib目錄中,寫介面類和實現類

Java代碼
package com.lamp.service;

public interface MessageService {
public String getName(String name);
}
[java] view plainprint?
package com.lamp.service;

public interface MessageService {
public String getName(String name);
}

實現類

Java代碼
package com.lamp.service.impl;

import com.lamp.service.MessageService;

public class MessageServiceImpl implements MessageService {

public String getName(String name) {
return "hellow " + name + ", welcome to WebService world";
}

}
[java] view plainprint?
package com.lamp.service.impl;

import com.lamp.service.MessageService;

public class MessageServiceImpl implements MessageService {

public String getName(String name) {
return "hellow " + name + ", welcome to WebService world";
}

}

在src目錄下新建文件夾META-INF,然後再在其下新建文件夾xfire,在xfire目錄下新建配置文件services.xml

Xml代碼
<?xml version="1.0" encoding="UTF-8"?>

<service>
<name>MessageService</name>
<serviceClass>com.lamp.service.MessageService</serviceClass>
<implementationClass>com.lamp.service.impl.MessageServiceImpl</implementationClass>
</service>
</beans>
[xml] view plainprint?
<?xml version="1.0" encoding="UTF-8"?>

<service>
<name>MessageService</name>
<serviceClass>com.lamp.service.MessageService</serviceClass>
<implementationClass>com.lamp.service.impl.MessageServiceImpl</implementationClass>
</service>
</beans>

最後在web.xml中配置xfire的servlet

Xml代碼
<servlet>
<servlet-name>XFireServlet</servlet-name>
<servlet-class>

</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/servlet/XFireServlet/*</url-pattern>
</servlet-mapping>

<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
[xml] view plainprint?
<servlet>
<servlet-name>XFireServlet</servlet-name>
<servlet-class>

</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/servlet/XFireServlet/*</url-pattern>
</servlet-mapping>

<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>

這樣伺服器端開發完畢,現在開始客戶端的開發
新建一個java project也將xfire相關的jar引入,我用ant在客戶端生成代理對象,在項目路徑下新建build.xml,代碼為

Xml代碼
<?xml version="1.0" encoding="UTF-8"?>

<project name="WebService" basedir="." default="gen-webservice">

<property file="build.properties">
</property>

<path id="project-classpath">
<fileset dir="${lib.dir}">
<include name="**/*.jar" />
</fileset>
</path>

<target name="gen-webservice">
<taskdef name="wsgen" classname="org.codehaus.xfire.gen.WsGenTask" classpathref="project-classpath" />

<wsgen outputDirectory="${src.dir}"
wsdl="${wsdl.dir}" package="com.lamp.ws.client" overwrite="true"/>

</target>

</project>
[xml] view plainprint?
<?xml version="1.0" encoding="UTF-8"?>

<project name="WebService" basedir="." default="gen-webservice">

<property file="build.properties">
</property>

<path id="project-classpath">
<fileset dir="${lib.dir}">
<include name="**/*.jar" />
</fileset>
</path>

<target name="gen-webservice">
<taskdef name="wsgen" classname="org.codehaus.xfire.gen.WsGenTask" classpathref="project-classpath" />

<wsgen outputDirectory="${src.dir}"
wsdl="${wsdl.dir}" package="com.lamp.ws.client" overwrite="true"/>

</target>

</project>

J. 求救Java怎麼調用 net的webService

一. 使用axis1.x調用webservice方法
Axis的最常用版本:1.4和2.0版本。以下為1.4版本
核心代碼:
// webserviceURL
service_url = "http://vip.cxcod.com/PodApi/GetPodStr.asmx?wsdl";
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new java.net.URL(service_url));
// 設置要調用的方法
// http://intelink.net/是wsdl中definitions根節點的targetNamespace屬性值
call.setOperationName(new QName("http://intelink.net/","GetStrByJobno"));
// 該方法需要的參數
call.addParameter("CustNo",
org.apache.axis.encoding.XMLType.XSD_STRING,
javax.xml.rpc.ParameterMode.IN);
call.addParameter("passwd",
org.apache.axis.encoding.XMLType.XSD_STRING,
javax.xml.rpc.ParameterMode.IN);
call.addParameter("Jobno",
org.apache.axis.encoding.XMLType.XSD_STRING,
javax.xml.rpc.ParameterMode.IN);
// 方法的返回值類型
call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);
// call.setUseSOAPAction(true); //call.setSOAPActionURI("http://intelink.net/GetStrByJobno");
// 調用該方法, new Object[] { CustNo, passwd, Jobno}為參數列表
String xmlStr = call.invoke(new Object[] { CustNo, passwd, Jobno}).toString();
} catch (Exception e) {
e.printStackTrace();
}
JAVA用這種方式調用webservice,需要注意的地方:
1. 伺服器未能識別 HTTP 標頭 SOAPAction 的值:
症狀一:
Web Service + ASP.NET 應用程序部署到伺服器默認目錄中,在IE中用http://<伺服器地址>/<程序目錄名>/<默認啟動頁面名>發生「伺服器未能識別 HTTP 標頭 SOAPAction 的值」錯誤。
症狀二:
在Java平台上調用.NET Web Service的服務時,出現"伺服器未能識別 HTTP 標頭 SOAPAction 的值"。
症狀三:
在Java平台下調用.NET WEB Service,出現數據時有時無。

解決對策:

給.NET的WebService類(即.asmx文件下的類)添加屬性[SoapDocumentService(RoutingStyle=SoapServiceRoutingStyle.RequestElement)]
小知識:
什麼是SoapAction?它在WSDL中有何作用?
SOAPAction HTTP request header被用來標識SOAP HTTP請求的目的地,其值是個URI地址。SOAP發送並不限制格式、URI特徵或其必須可解析,那麼在這種情況下,發送一個HTTP SOAP請求時,其HTTP客戶端必須使用/指明SOAPAction HTTP request header。

SOAPAction header的內容可以被用在服務端,諸如:防火牆適當的過濾基於HTTP的SOAP請求消息等場景。SOAPAction header的值為空串("")表示SOAP消息的目的地由HTTP請求的URI標識;無值則表示沒有指定這條消息的目的地。

本人補充:
在.NET環境調用.NET WebService出現 「SOAPAction 值在 XML Web services 的所有方法中不唯一的錯誤」,也可以通過此法解決。

2. 為了Java能夠調用WebService的方法,所以。NETP寫的WebServiced的每個方法都要聲明為Rpc方法,即添加"[SoapRpcMethod.....]".
例如:[WebMethod]
[SoapRpcMethod(Use=SoapBindingUse.Literal,Action= http://tempuri.org/HelloWorld", RequestNamespace = "http://tempuri.org/", ResponseNamespace = "http://tempuri.org/")]

3. 對返回值、參數的處理上:
應盡量將webservice方法的返回值、參數都寫成字元串(String)不要使用復雜對象類型,這樣便於在網路上傳輸。避免了復雜對象類型的不易轉換問題。。。對於返回類型是字元串數組型的,可以設置返回類型為org.apache.axis.encoding.XMLType.SOAP_VECTOR或java.lang.String[].class.

二.利用xfire調用WebService
XFire是新一代的Java Web服務引擎,XFire使得在JavaEE應用中發布Web服務變得輕而易舉。和其他Web服務引擎相比,XFire的配置非常簡單,可以非常容易地和Spring集成,它使得Java開發人員終於可以獲得和.Net開發人員一樣的開發效率。

核心代碼:
Service service = new ObjectServiceFactory().create(IWebservice.class);
XFireProxyFactory factory =
new XFireProxyFactory(XFireFactory.newInstance().getXFire());
String url= "http://localhost:8080/webservices/services/webservices";
IWebservice iw = (IWebservice) factory.create(service, url);
List list=iw.getTest();

熱點內容
黑莓存儲空間 發布:2024-05-05 02:19:50 瀏覽:273
我的世界礦石島伺服器宣傳片 發布:2024-05-05 02:17:19 瀏覽:612
如何區分安卓原裝充電器 發布:2024-05-05 01:41:23 瀏覽:72
怎麼從蘋果轉移到安卓 發布:2024-05-05 01:41:20 瀏覽:721
支付寶付款碼怎麼設置密碼 發布:2024-05-05 01:27:36 瀏覽:878
qtp錄制的腳本 發布:2024-05-05 01:14:04 瀏覽:367
如何安裝卡羅拉安卓系統 發布:2024-05-05 01:09:00 瀏覽:985
sql創建表查詢表 發布:2024-05-05 01:00:12 瀏覽:799
食色抖音上傳 發布:2024-05-05 00:55:56 瀏覽:658
java圖片下載 發布:2024-05-05 00:50:45 瀏覽:598