httpclient简单例子,一种简单的webservice

HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。(来自百度百科)

java代码:

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.PostMethod;


public class Test{

    public static void testHttpClient(String phone, String name) throws IOException {
        HttpClient httpClient = new HttpClient();
        httpClient.getParams().setContentCharset("utf-8");//设置编码

        //构造POST请求,GET请求也类似
        PostMethod postMethod = new PostMethod(url);//类似http://....
        postMethod.addParameter("phone", phone);//Post参数
        postMethod.addParameter("name", name);
        httpClient.executeMethod(postMethod);

        //解析response
        StringBuffer buffer = new StringBuffer();
        BufferedReader br = new BufferedReader(new InputStreamReader(postMethod.getResponseBodyAsStream(), "utf-8"));
        String tmpLineStr = "";
        while ((tmpLineStr = br.readLine()) != null) {
            buffer.append(tmpLineStr);
        }
        String returnValue = buffer.toString();
        System.out.println(returnValue);
        postMethod.releaseConnection();
    }
}

 

 

     

 

 

<think>好的,用户之前问过关于HTTP POST请求参数处理的问题,现在他需要的是一个用Java编写的发送WebService请求的例子。我需要先确定用户的需求是什么。WebService通常指基于SOAP的Web服务,或者可能是RESTful服务?但通常WebService更多指SOAP。所以用户可能想要通过Java调用一个SOAP服务。 首先,我需要考虑用户可能的背景。他可能是一个刚开始学习Java Web服务开发的开发者,或者需要与现有的SOAP服务进行交互。用户可能不太清楚如何构造SOAP请求,或者不知道有哪些工具可以使用。我需要提供一个简单易懂的例子,可能使用主流的库,比如JAX-WS或者Apache CXF,或者更简单的HttpURLConnection手动发送请求。 接下来,我需要确保例子正确且符合最佳实践。如果使用JAX-WS,通常会用wsimport工具生成客户端存根,但用户可能需要一个手动的例子,特别是当WSDL不可用或者用户想了解底层实现时。或者用户可能需要一个更灵活的方式,比如使用Apache HttpClient发送SOAP消息。 同时,用户之前的提问中涉及了HTTP POST的不同参数部分,可能对请求的结构有一定的了解,因此可能需要一个详细的例子,展示如何构建SOAP信封,设置请求头,处理响应等。 我需要考虑不同的实现方式,并选择最适合用户需求的。可能提供两种例子一种是使用JAX-WS的动态调用,另一种是手动构造SOAP请求并使用HttpURLConnection发送。这样用户可以了解不同层次的实现方法。 另外,需要注意代码的正确性,比如正确的SOAP命名空间、正确的HTTP头设置,以及异常处理。用户可能需要完整的代码示例,包括导入的包和主方法,以便直接复制运行测试。 还要提醒用户关于可能的依赖,比如如果使用JAX-WS,可能需要添加相关的库,或者Java版本是否支持。如果是手动发送请求,需要处理连接和流的管理,确保资源正确释放。 最后,总结一下步骤:确定用户需求,选择合适的方法(JAX-WS或手动HTTP请求),编写示例代码,并解释每一步的作用,以及注意事项,如异常处理、依赖项等。同时,可能需要比较不同方法的优缺点,帮助用户根据实际情况选择。</think>### Java调用WebService的两种常见方式示例 以下是两种Java调用SOAP WebService的主流方法,分别基于原生JAX-WS和手动构建SOAP请求: --- #### **方式一:使用JAX-WS动态调用(推荐)** ```java import javax.xml.namespace.QName; import javax.xml.ws.Service; import java.net.URL; // 1. 定义WebService接口(需与WSDL中的portType匹配) public class WebServiceClient { public static void main(String[] args) throws Exception { // 2. 指定WSDL地址和服务信息 URL wsdlUrl = new URL("http://example.com/Service?wsdl"); QName serviceName = new QName("http://example.com/", "MyService"); QName portName = new QName("http://example.com/", "MyServicePort"); // 3. 创建服务实例 Service service = Service.create(wsdlUrl, serviceName); // 4. 获取服务端口(动态代理) MyServiceInterface port = service.getPort(portName, MyServiceInterface.class); // 5. 调用远程方法 String result = port.sayHello("World"); System.out.println("Response: " + result); } } // 服务接口定义(需与WSDL中的操作一致) interface MyServiceInterface { String sayHello(String name); } ``` **关键点说明**: 1. 使用`wsimport`工具(JDK自带)根据WSDL生成客户端代码更高效 2. 需替换实际WSDL地址、命名空间和操作名称 3. 自动处理SOAP编组/解组 --- #### **方式二:手动构建SOAP请求(HTTP调用)** ```java import java.io.*; import java.net.HttpURLConnection; import java.net.URL; public class ManualSoapClient { public static void main(String[] args) { try { // 1. 创建连接 URL url = new URL("http://example.com/Service"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); // 2. 设置HTTP头 conn.setRequestMethod("POST"); conn.setRequestProperty("Content-Type", "text/xml; charset=utf-8"); conn.setRequestProperty("SOAPAction", "http://example.com/sayHello"); conn.setDoOutput(true); // 3. 构建SOAP请求体 String soapRequest = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" " + "xmlns:exam=\"http://example.com/\">" + "<soapenv:Header/>" + "<soapenv:Body>" + "<exam:sayHello>" + "<exam:name>World</exam:name>" + "</exam:sayHello>" + "</soapenv:Body>" + "</soapenv:Envelope>"; // 4. 发送请求 try (OutputStream os = conn.getOutputStream()) { os.write(soapRequest.getBytes("UTF-8")); } // 5. 读取响应 if (conn.getResponseCode() == 200) { try (BufferedReader br = new BufferedReader( new InputStreamReader(conn.getInputStream()))) { String line; while ((line = br.readLine()) != null) { System.out.println(line); } } } else { System.out.println("HTTP Error: " + conn.getResponseCode()); } } catch (Exception e) { e.printStackTrace(); } } } ``` **关键点说明**: 1. 需要精确构造SOAP信封结构 2. 必须设置正确的`SOAPAction`头 3. 处理XML解析和错误响应更复杂 --- ### **方法对比与选择建议** | **特性** | JAX-WS动态调用 | 手动HTTP调用 | |-----------------------|------------------------------------|----------------------------------| | 开发效率 | ⭐⭐⭐⭐(自动生成客户端) | ⭐⭐(需手动构造XML) | | 维护成本 | 低(WSDL变更后重新生成) | 高(需同步修改XML模板) | | 灵活性 | 依赖WSDL描述 | 完全控制请求细节 | | 适用场景 | 标准SOAP服务 | 特殊协议要求或旧系统集成 | | 依赖管理 | 需要JAX-WS实现(JDK内置或Metro) | 仅需Java标准库 | --- ### **操作实践建议** 1. **优先使用JAX-WS**:若服务提供WSDL,用`wsimport`生成客户端 ```bash wsimport -keep http://example.com/Service?wsdl ``` 2. **处理安全需求**:添加WS-Security等扩展时使用Apache CXF或Axis2 3. **异常处理**:务必捕获`SOAPFaultException`和IO异常 4. **日志调试**:启用JAX-WS消息日志查看原始SOAP报文 ```java System.setProperty("com.sun.xml.ws.transport.http.client.HttpTransportPipe.dump", "true"); ``` --- ### **完整调用流程示意图** ``` [Java Client] --> (生成SOAP请求) --> [WebService Server] ^ | | | +-----------(解析SOAP响应)---------+ ``` 通过以上示例,可根据实际需求选择合适的方式实现WebService调用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值