import java.net.MalformedURLException;
import java.net.URL;
import org.apache.commons.httpclient.params.HttpClientParams;
import org.codehaus.xfire.MessageContext;
import org.codehaus.xfire.client.Client;
import org.codehaus.xfire.handler.AbstractHandler;
import org.codehaus.xfire.transport.http.CommonsHttpMessageSender;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import com.ourlinc.tern.util.XmlHelper;
/**
* web service接口封装
*
*
*/
public class Test {
public static void main(String[] args) {
Test test = new Test();
test.setWorkNo("xx");
test.setPassword("xx");
test.setWsdl("http://xxx/xxx.asmx?WSDL");
test.getCarrayStations();
}
public Test() {
super();
}
/**
* soap验证账户
*/
ClientAuthenticationHandler m_Account = new ClientAuthenticationHandler();
public void setWorkNo(String workno) {
m_Account.workno = workno;
}
public void setPassword(String password) {
m_Account.password = password;
}
public static class ClientAuthenticationHandler extends AbstractHandler {
private String workno;
private String password;
public ClientAuthenticationHandler(String username, String password) {
super();
this.workno = username;
this.password = password;
}
public ClientAuthenticationHandler() {
super();
}
// 命名空间 http://tempuri.org/
public static final String NS = "http://tempuri.org/";
public void invoke(MessageContext context) throws Exception {
// 为SOAP Header构造验证信息
org.jdom.Element el = new org.jdom.Element("header", org.jdom.Namespace
.getNamespace(NS));
context.getOutMessage().setHeader((org.jdom.Element) el);
org.jdom.Element auth = new org.jdom.Element("SecurityHeader", org.jdom.Namespace
.getNamespace(NS));
org.jdom.Element workno_el = new org.jdom.Element("WorkNo", org.jdom.Namespace
.getNamespace(NS));
workno_el.addContent(workno);
org.jdom.Element password_el = new org.jdom.Element("Password", org.jdom.Namespace
.getNamespace(NS));
password_el.addContent(password);
auth.addContent(workno_el);
auth.addContent(password_el);
el.addContent(auth);
}
}
// 查询全部始发车站(一个售票系统可能有多个始发车站)
public void getCarrayStations() {
Object[] result = null;
Client client = null;
Object[] params = null;
try {
params = new Object[] { "" };
client = getClient(m_Wsdl);
client.toString();
result = client.invoke("GetCarrayStations", params);
} catch (Exception e) {
e.printStackTrace();
}
String[] results = getResultStrings(result);
if (null != results) {
for (String s : results) {
System.out.println(s);
}
}
closeClient(client);
return;
}
URL m_Wsdl;
Client client = getClient(m_Wsdl);
/**
* 取得服务接口客户端实例
*
* @return 客户端实例
* @throws Exception
*/
Client getClient(URL wsdl) {
Client client;
try {
client = new Client(wsdl);
HttpClientParams params = new HttpClientParams();
params.setParameter(HttpClientParams.USE_EXPECT_CONTINUE, Boolean.FALSE);
// params.setParameter(HttpClientParams.CONNECTION_MANAGER_TIMEOUT,
// 10 * 1000L);
params.setConnectionManagerTimeout(10 * 1000L);
// params.setParameter(HttpClientParams.SO_TIMEOUT, 20 *1000L);
params.setSoTimeout(40 * 1000);
client.setProperty(CommonsHttpMessageSender.HTTP_CLIENT_PARAMS, params);
client.addOutHandler(m_Account);
return client;
} catch (Exception e) {
return null;
}
}
/**
* 出错时关闭由getClient()取得的客户端实例
*
* @param client
* 客户端实例
*/
void closeClient(Client client) {
client.close();
}
public void setWsdl(String wsdl) {
URL url;
if (wsdl.startsWith("http://") || wsdl.startsWith("https://")) {
try {
url = new URL(wsdl);
} catch (MalformedURLException e) {
throw new IllegalArgumentException(e);
}
} else {
url = ClassLoader.getSystemResource(wsdl);
if (null == url) {
url = Thread.currentThread().getContextClassLoader().getResource(wsdl);
}
}
m_Wsdl = url;
}
String[] getResultStrings(Object[] result) {
if (null == result || 0 == result.length) {
System.out.println("接口无返回结果");
// _Logger.info("接口无返回结果");
return null;
}
Element e = ((Document) result[0]).getDocumentElement();
NodeList nodes = e.getChildNodes();
String[] items = new String[nodes.getLength()];
for (int i = 0; i < items.length; i++) {
Node node = nodes.item(i);
items[i] = XmlHelper.getElementText(node);
}
return items;
}
}
只是一个模板,稍作收藏,以备不时之需!
分享到:
相关推荐
标题“Xfire调用WebService无法传递参数问题”暗示了开发者在尝试使用Xfire框架时遇到了参数无法正常传递到Web服务的情况。这可能涉及到多个方面,如编码问题、序列化错误、类型不匹配或者配置不正确等。以下是一些...
在本文中,我们将探讨XFire与Spring框架集成以实现WebService客户端的两种开发方式。XFire是一个流行的Java Web服务实现库,而Spring是一个广泛使用的应用程序框架,可以方便地管理和配置Web服务客户端。 ### 方式...
总结,XFire客户端生成是Java开发Web服务客户端的一种高效方式,通过自动化的代码生成,开发者可以快速地接入并调用Web服务,大大减少了手动编写客户端代码的工作量。在实际开发中,结合Spring等框架,可以构建出...
CXF、AXIS2、XFire是三种流行的Java Web服务框架,它们允许开发者创建和消费Web服务。在本文中,我们将重点关注CXF客户端调用Web服务的方法,特别是处理Map类型参数的问题。 首先,CXF客户端调用Web服务时,通常会...
对于Java开发者来说,JAX-WS提供了编写WEBSERVICE客户端和服务端代码的工具和支持。 6. **SOAP消息处理模型**:包括客户端、服务端、以及可能的中间代理。客户端发起请求,服务端处理请求并返回响应,中间代理可...
将XFire的jar包放入项目的类路径,确保在运行时能够找到。 #### 2.3 配置web.xml 在`web.xml`中配置XFireServlet,这将作为Web Service的入口点。添加如下内容: ```xml <servlet-name>XFireServlet ...
在开发基于Xfire的应用程序或游戏插件时,开发者通常需要这些jar包来接入Xfire的服务。 **Xfire的核心功能与技术**: 1. **网络通信**:Xfire通过TCP/IP协议进行网络通信,实现用户间的即时消息传递和游戏状态更新...
7. 使用XFire客户端工具调用WebService,可以根据已有服务接口创建`XFireProxyFactory`,或者在未知接口的情况下通过WSDL文档动态生成接口。 【XFire配置示例】 - 配置XFireServlet: ```xml <servlet-name>...
由于1.2.6版本不包含xalan项目,需要单独从xml.apache.org下载xalan的二进制包,并将jar文件放入`xfire_service/lib`。 4. **配置服务元数据** 在`src`目录下创建`META-INF`和`xfire`文件夹。在`xfire`文件夹内...
Webservice是一种分布式计算模式下的技术,它为不同的应用程序之间提供了标准化的网络接口,使得这些应用能够通过互联网进行数据交换和互操作。Webservice通常采用HTTP作为传输协议,并使用XML作为数据格式,使得...
将服务类放入Web应用的特定目录(如WEB-INF/classes),并配置`web.xml`文件以启用Servlet容器对Web服务的支持。 5. 创建客户端调用: 使用XFIRE提供的API,如`XFireFactory`和`XFireProxyFactory`,可以创建一个...