`
stingh711
  • 浏览: 123735 次
  • 性别: Icon_minigender_1
  • 来自: 无锡
社区版块
存档分类
最新评论

使用httpclient发送soap message

    博客分类:
  • java
阅读更多

这两天在写一个tr069的simulator,原理很简单啦,用httpclient模拟tr069的client端,发送soap message到我们的acs server.

发送soap message的代码如下:

public class MessageSender {
/**
* Logger for this class
*/
private static final Log logger = LogFactory.getLog(MessageSender.class);

private HttpClient httpClient;
private PostMethod postMethod;
private MessageFactory messageFactory;
private String url;
private NameValuePair sessionId;

public MessageSender(String ip){
this.httpClient = new HttpClient();

try {
this.messageFactory = MessageFactory.newInstance();
} catch (SOAPException e) {
logger.error(e.getMessage());
}

this.url = generateRequestUrl(ip);
}

private String generateRequestUrl(String ip) {
return "http://" + ip + ":8080/vantage/TR069";
}

public SOAPMessage sendMessage(SOAPMessage input) throws IOException, SOAPException {
this.postMethod = new PostMethod(this.url);
byte[] dataAsBytes = null;

if (input == null) {
logger.debug("Send a empty post");
dataAsBytes = new byte[0];
} else {

ByteArrayOutputStream data = new ByteArrayOutputStream();
input.writeTo(data);
dataAsBytes = data.toByteArray();
}

RequestEntity entity = new ByteArrayRequestEntity(dataAsBytes);
this.postMethod.setRequestEntity(entity);

if (this.sessionId != null) {
this.postMethod.addParameter(this.sessionId);
}

this.httpClient.executeMethod(this.postMethod);

sessionId = this.postMethod.getParameter("SessionID");

InputStream in = this.postMethod.getResponseBodyAsStream();

if (null == in) {
return null;
}

return this.messageFactory.createMessage(null, in);
}
}

最初的code里面,只有一个PostMethod,这样每次会一直keep一个http连接.因为在server端,只直接用http session来保存server的状态的,所以必须要是保持是一个session.用一个PostMethod可以做到这点.不过奇怪的是,在发第二次请求的时候,怎么都拿不到http connection.也不知道是不是httpclient的bug.后来才每次调用都重新create一个PostMethod,但是把第一次得到的sessionID add进去.

分享到:
评论

相关推荐

    利用DOM4J解析SOAP的简单示例

    在实际应用中,解析SOAP消息通常结合网络请求,例如使用Apache HttpClient发送SOAP请求并接收响应,然后使用DOM4J解析响应内容。了解DOM4J库的其他功能,如XPath查询、命名空间处理等,可以帮助更高效地处理复杂SOAP...

    VB.NET/JAVA 采用SOAP 与Webservice发送/接收数据

    - Java中可以通过`java.net.HttpURLConnection`或者第三方库如Apache HttpClient来发送SOAP请求。 - 构建SOAP消息的方式与VB.NET类似,但需要注意字符串转义的不同,例如在Java中XML的双引号需要用`\"`来表示。 -...

    webservice 调用实例soap协议

    例如,在Java中,可以使用`javax.xml.soap`包中的`SOAPConnectionFactory`和`SOAPMessage`类来创建并发送SOAP请求。 3. **接收并解析SOAP响应**:Web服务执行操作后,会返回一个SOAP响应,同样也是XML格式。客户端...

    Titanium中SOAPClient访问SOAP协议的WebService

    在上述代码中,`soapMessage`变量包含了SOAP请求的XML结构,其中包含了方法名和参数。`open`方法设置了请求类型为POST,并提供了Web服务的URL。`send`方法将SOAP消息作为请求体发送出去。 当接收到服务器的响应时,...

    java发送邮件和发送短信代码

    4. **发送请求**:使用`HttpURLConnection`或第三方库如Apache HttpClient发送请求。 5. **处理响应**:解析API返回的结果,确认短信是否成功发送。 ```java import java.net.HttpURLConnection; import java.net....

    NET调用API源码

    在.NET框架中,调用API通常通过HTTP客户端库或Web服务客户端实现,例如使用HttpClient类来发送HTTP请求,或者使用WCF(Windows Communication Foundation)来访问SOAP服务。下面将详细阐述这一主题。 首先,...

    asp.net发送手机短信

    在ASP.NET中,我们可以使用`System.Web.Services.Protocols.SoapHttpClientProtocol`类或者`HttpClient`类来调用这种基于SOAP或RESTful的Web服务。 1. **注册与激活** 在使用亿美短信服务之前,你需要先在亿美短信...

    C#利用Web Service发送手机短信

    本篇文章将深入探讨如何使用C#结合Web Service来实现手机短信的发送功能。 首先,我们需要理解Web Service的基本概念。Web Service是一种基于互联网的、能够通过标准协议(如SOAP)交换数据的服务。在C#中,我们...

    基于java的发送短信包 LemonSMS.zip

    1. **SMS协议理解**:首先,你需要了解短信传递所使用的协议,如Short Message Peer-to-Peer (SMPP)或Simple Object Access Protocol (SOAP)。这些协议定义了与短信网关交互的规则。 2. **Java网络编程**:发送短信...

    关于Java发送短信

    开发者可以使用Java的`HttpURLConnection`类或者第三方库如Apache HttpClient或OkHttp来发起HTTP请求。这些库简化了设置请求头、处理响应以及管理连接的过程。 其次,理解短信服务提供商的API至关重要。通常,你...

    vs2019调用接口APIDemo[.NET Framework4.6].zip

    4. **发送请求**:使用HttpClient的`GetAsync`或`PostAsync`方法发送请求。对于POST请求,可能需要传递JSON或表单数据。 5. **处理响应**:等待异步操作完成,然后从HttpResponseMessage对象中获取响应内容。根据...

    飞信开放WebService接口调用C#源码

    3. **调用发送短信的接口方法**:源码中会有具体的函数调用来发送短信,例如`SendSMS(string phoneNumber, string message)`。此函数将电话号码和短信内容作为参数传递,然后通过WebService接口发送出去。 4. **...

    .Net动态调用WebService

    这通常涉及到使用System.Web.Services.ProtocolsSoapHttpClientProtocol类或者更现代的HttpClient类,以及相关的序列化和反序列化技术。以下是对这个主题的详细讲解: 一、SOAP协议与Web服务 SOAP(Simple Object ...

    C#Post带参数请求+WebService接口.zip

    在C#中,我们可以使用HttpClient类来实现POST请求。以下是一个基本的POST请求步骤: - 创建HttpClient对象:首先,需要创建一个`HttpClient`实例,它是HTTP客户端服务的基础类,用于发送HTTP请求。 - 设置请求头...

    C#调用webservice源码 (天气预报)

    对于.NET Core和.NET 5及更高版本,推荐使用`HttpClient`类进行WebService调用,它更加轻量级且易于管理。Weather Forecast WebService通常会提供一个SOAP或RESTful的API,这里以REST为例: ```csharp using System...

    Java远程读取XML文件相关

    下面是一个简单的示例,展示如何发送SOAP请求并接收响应。 ##### 发送SOAP请求 ```java import javax.xml.namespace.QName; import javax.xml.ws.Service; import java.net.URL; public class SOAPClient { ...

    AXIS使用和配置 (2).pdf

    ACK Handler的代码示例显示了如何使用Java的SOAP API来创建和处理SOAP消息,包括生成ACK响应,涉及到诸如DocumentBuilderFactory、MessageFactory、SOAPElement等类的使用。 总的来说,AXIS在SAP PI环境中的配置和...

    WeatherReport

    以下是一个示例,展示如何使用`HttpClient`发送POST请求获取信息: ```csharp using (HttpClient client = new HttpClient()) { client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue...

    C#POST请求WCF服务

    使用`HttpClient`或`WebClient`类来发送POST请求。`HttpClient`是.NET Framework 4.5及更高版本中推荐的HTTP客户端,因为它提供了更现代、更灵活的API。 ```csharp using System.Net.Http; using System.Net....

    各种开发语言示例调用HTTP接口(示例中默认HTTP接口编

    2. **Java**:Java可以使用`HttpURLConnection`或第三方库如Apache HttpClient、OkHttp来发送HTTP请求。例如,使用`HttpURLConnection`的基本GET请求:`URL url = new URL("http://example.com"); HttpURLConnection...

Global site tag (gtag.js) - Google Analytics