cxfjava soap webservicee服务端怎么能获取客户端发送的soap请求信息

&/pre&&pre name=&code& class=&java&&public void testWeb() {
String requestSoapData = &&?xml version=\&1.0\& encoding=\&UTF-8\&?&&
+ &&soapenv:Envelope xmlns:soapenv=\&http://schemas.xmlsoap.org/soap/envelope/\& &
+ &xmlns:xsd=\&http://www.w3.org/2001/XMLSchema\& xmlns:xsi=\&http://www.w3.org/2001/XMLSchema-instance\&&&
+ &&soapenv:Body&&
+ &&ns1:getPrescsOfPatient soapenv:encodingStyle=\&http://schemas.xmlsoap.org/soap/encoding/\& xmlns:ns1=\&\&&&
+ &&cardNumber&A&/cardNumber&&
+ &&prescStatus&0&/prescStatus&&
+ &&/ns1:getPrescsOfPatient&&
+ &&/soapenv:Body&& + &&/soapenv:Envelope&&;
String response = uniform(
&http://192.168.23.166:8080/drug/com/webService/service/prescService?wsdl&,
requestSoapData, &UTF-8&);
System.out.println(response);
HTTPclient通过soap协议访问cxf写的webservice服务端的方法。
public String uniform(String url, String requestData, String charset) {
HttpPost httppost = new HttpPost(url);
StringEntity reqEntity = new StringEntity(requestData, charset);
httppost.setEntity(reqEntity);
HttpClient client = HttpClients.createDefault();
CloseableHttpResponse response = (CloseableHttpResponse) client
.execute(httppost);
InputStream is = response.getEntity().getContent();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int i = -1;
while ((i = is.read()) != -1) {
baos.write(i);
return baos.toString(charset);
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
本文已收录于以下专栏:
相关文章推荐
public class AbstractServiceImpl implements BaseService{
public ...
通过httpclient访问已经部署好的webservice,webservice的创建和部署通过axis2完成,参考 
Axis2 Eclipse 开发webservice(2)http://...
Java调用webservice天气预报(SOAP请求的方式获取天气信息并解析返回的XML)
webservice网站为.cn/WebServices/We...
java调用webservice天气预报(SOAP请求的方式获取天气信息并解析返回的XML)
webservice网站为.cn/WebServices/Wea...
httpclient妙用一 httpclient作为客户端调用webservice
/blog/2223454
httpclient...
package com.
import java.io.BufferedR
import java.io.F
import java.io.FileR
httpClient远程调用webservice的实例代码,亲测可用,留作备忘。
他的最新文章
讲师:姜飞俊
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)模拟请求webservice并获取返回报文
有时需要模拟请求webservice服务,并处理返回的报文,根据报文的信息进行业务处理。
样例代码如下:
import java.io.ByteArrayOutputS
import java.
有时需要模拟请求webservice服务,并处理返回的报文,根据报文的信息进行业务处理。
样例代码如下:
import java.io.ByteArrayOutputS
import java.io.DataOutputS
import java.io.InputS
import java.io.UnsupportedEncodingE
import java.net.HttpURLC
import java.net.URL;
import java.util.HashMap;
import java.util.M
public class SimRequestWS {
public static Map&String,String& doRequestWS(URL url, String request) {
HttpURLConnection connection = null;
String rspMsg = "";
String rspCode = "ERROR";
byte[] requestBuf = (byte[]) null;
requestBuf = request.getBytes("gbk");
connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setRequestMethod("POST");
connection.setUseCaches(false);
connection.setRequestProperty("Content-Type", "text/plain");
connection.connect();
DataOutputStream out = new DataOutputStream(
connection.getOutputStream());
out.write(requestBuf);
out.flush();
out.close();
if (connection.getResponseCode() != 200) {
System.out.println("ERROR: " + connection.getResponseMessage());
InputStream in = connection.getInputStream();
ByteArrayOutputStream bufOut = new ByteArrayOutputStream();
byte[] readBuf = new byte[100];
while (true) {
int ret = in.read(readBuf);
if (ret & 0)
bufOut.write(readBuf, 0, ret);
byte[] rspBuf = bufOut.toByteArray();
rspMsg = new String(rspBuf, "gbk");
rspCode = connection.getResponseMessage();
} catch (Exception e) {
e.printStackTrace();
connection = null;
Map&String,String& map = new HashMap&String,String&();
map.put("rspCode", rspCode);
map.put("rspMsg", rspMsg);
return map;
public static void main(String[] args) throws Exception,
UnsupportedEncodingException {
URL url = new URL("http://172.168.27.154:8081/cxfdemo?wsdl");
Map&String,String& map =SimRequestWS.doRequestWS(
"&soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ws=\"http://ws.com/\"&"
+ "&soapenv:Header/&"
+ "&soapenv:Body&"
+ "&catt:hello&"
+ "&arg0&李四&/arg0&"
+ "&/catt:hello&"
+ "&/soapenv:Body&"
+ "&/soapenv:Envelope&");
System.out.println(map);
模拟请求一个Webservice服务,返回信息如下:
{rspCode=OK, rspMsg=&soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"&&soap:Body&&ns2:helloResponse xmlns:ns2="/"&&return&hello 李四&/return&&/ns2:helloResponse&&/soap:Body&&/soap:Envelope&}
版权声明:本文内容由互联网用户自发贡献,本社区不拥有所有权,也不承担相关法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至: 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
用云栖社区APP,舒服~
【云栖快讯】红轴机械键盘、无线鼠标等753个大奖,先到先得,云栖社区首届博主招募大赛9月21日-11月20日限时开启,为你再添一个高端技术交流场所&&
为您提供简单高效、处理能力可弹性伸缩的计算服务,帮助您快速构建更稳定、安全的应用,提升运维效率,降低 IT 成本...
RDS是一种稳定可靠、可弹性伸缩的在线数据库服务。支持MySQL、SQL Server、PostgreSQL、高...
MaxCompute75折抢购
Loading...CXF interceptor拦截器如何获取客户端发送的body消息内容 - ITeye问答
请求各位大侠的帮助..
以下是我服务器端得拦截器我想通过context.getMessageContext()方法获取body信息可是总为null,不知道如何获取body中的消息内容,还有别的什么方法吗?
.bps.security.
import java.io.IOE
import javax.annotation.R
import javax.security.auth.callback.C
import javax.security.auth.callback.CallbackH
import javax.security.auth.callback.UnsupportedCallbackE
import javax.servlet.http.HttpServletR
import javax.xml.ws.WebServiceC
import javax.xml.ws.handler.MessageC
import org.apache.cxf.interceptor.F
import org.apache.cxf.message.M
import org.apache.cxf.transport.http.AbstractHTTPD
import org.apache.ws.security.WSPasswordC
public class WsAuthHandler& implements CallbackHandler{
//@Resource
//private WebServiceC
public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];
this.setUsername(pc.getIdentifier());
this.setPassword(pc.getPassword());
System.out.println("identifier: " + pc.getIdentifier());
System.out.println("password: " + pc.getPassword());
System.out.println("usage: " + pc.getUsage());
&&&&&&&&&&&&&&&&& //我服务器端得拦截器我想通过context.getMessageContext()方法获取body信息可是总为null,
&&&&&&&&&&&&&&&&&&&& //不知道如何获取body中的消息内容,还有别的什么方法吗?
System.out.println(context.getMessageContext());
if (pc.getIdentifier().equals("yinfeifei")){
if (!pc.getPassword().equals("welcome1")) {
System.out.println("wrong password");
System.out.println("userinfosecurity validate successfully");
System.out.println("wrong username");
public String getUsername() {
public void setUsername(String username) {
this.username =
public String getPassword() {
public void setPassword(String password) {
this.password =
请求各位大侠的帮助..
以上是我服务器端得拦截器我想通过context.getMessageContext()方法获取body信息可是总为null,不知道如何获取body中的消息内容,还有别的什么方法吗?
[url]
http://blog.csdn.net/wangnetkang/article/details/7822570
[/url]
已解决问题
未解决问题博客分类:
cxf通过wsdl2java生成客户端调用webservice时,如果服务器端需要通过用户名和密码验证,则客户端必须传递验证所必须的用户名和密码,刚开始想通过url传递用户名和密码,于是在wsdl文件中直接在&soap:address location 标记中添加加入用户名和密码,但是webservice接收不到参数,此种方法行不通。后来在接口方法调用前用BindingProvider 得到RequestContext,在其中设置了请求需要的用户名和密码,接口顺利通过验证,执行成功,具体代码如下:
* 根据给定的参数执行接口程序
* @param request
public ZPILOT01SSOCMMIF001CONResponse executeService(
ZPILOT01SSOCMMIF001CON request) throws Exception {
// 得到本地服务类
MIZPILOT01SSOCMMIF001CONOutSynService service = new MIZPILOT01SSOCMMIF001CONOutSynService();
// 得到接口的代理
MIZPILOT01SSOCMMIF001CONOutSyn stub = service
.getMIZPILOT01SSOCMMIF001CONOutSynPort();
// 设置访问接口服务器的用户名和密码
BindingProvider bp = (BindingProvider)
Map&String, Object& context = bp.getRequestContext();
context.put(BindingProvider.USERNAME_PROPERTY, XI_USER_NAME);
context.put(BindingProvider.PASSWORD_PROPERTY, XI_PASSWORD);
// 执行接口
ZPILOT01SSOCMMIF001CONResponse response = stub
.miZPILOT01SSOCMMIF001CONOutSyn(request);
// 返回响应
浏览: 72240 次
来自: 火星
有解决了吗。。我也遇到 了。。
gaozi131 写道感谢楼主的分享,刚好解决了我一个项目的问 ...
感谢楼主的分享,刚好解决了我一个项目的问题,哈哈。加油!!!
我也遇到了,但是没有解决
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'

我要回帖

更多关于 cxf webservice服务端 的文章

 

随机推荐