为什么webservice认证 java头信息不能识别冒号

2013年10月 移动开发大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。本帖子已过去太久远了,不再提供回复功能。java调用webservice怎么添加 SoapHeader 做验证_百度知道
java调用webservice怎么添加 SoapHeader 做验证
因为对方要求有用户名和密码校验,找个人帮我看看方法需要传递2个参数,第一个SOHeader类型,第二个InputParameters (就是body部分) 方法名是INVOKEFMSWS
我有更好的答案
/ /aaaa&CUX_0_WS_SERVER_PRG_BindingStub stub=(CUX_0_WS_SERVER_PRG_BindingStub)service.setPassword(&/连接的用户名stub.in);).java 这个类调用服务。CUX_0_WS_SERVER_PRG_Service service=new CUX_0_WS_SERVER_PRG_ServiceLocator()如果你是用axis生成的代码的话 去用CUX_0_WS_SERVER_PRG_BindingStub.CUX_0_WS_SERVER_PRGSOAP();stub.setUsername(&aaaa&);
//dddd是一个SOAPHeader 具体看对方wsdl要求stub.invokefmsws(/连接的密码stub.setHeader( dddd)
采纳率:64%
我自己做过C#掉用Java的webservice测试用例,可以发给你看看,Java的WebService也是自己手码的,里面也有Java自己调自己的,可以分享你看一下。
为您推荐:
其他类似问题
webservice的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。17:49 提问
webservice“服务器未能识别 HTTP 头 SOAPAction 的值: 。”
Service service = new Service();
Call call = (Call) service.createCall();
String szUrl = "http://XXX/sendsms.asmx";
call.setTargetEndpointAddress(new java.net.URL(szUrl));
call.setOperationName(new QName("http://XXX/sendsms.asmx", "SendSmsService"));
call.addParameter("content", XMLType.XSD_STRING, ParameterMode.IN);
call.addParameter("phone", XMLType.XSD_STRING, ParameterMode.IN);
call.addParameter("uid", XMLType.XSD_STRING, ParameterMode.IN);
call.setUseSOAPAction(true);
call.setReturnType(org.apache.axis.encoding.XMLType.SOAP_STRING);
String ret = (String) call.invoke(new Object[] { "开始测试:这是内容;", "XXX", "2" });
System.out.println(ret);
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐java调用webservice-添加认证头(SOAPHeader)_ASP.NET技巧_动态网站制作指南
java调用webservice-添加认证头(SOAPHeader)
来源:人气:471
&有时候有些 webservice的调用 服务端要求除了必要的参数以外 &还需要通过认证头的认证 &比如下面这一段
一种方式,通过 axis 来实现
* 获取axis请求形式的加密头
* @return SOAPHeaderElement
public SOAPHeaderElement getHoapHeader(){
Map&String,String& map = CacheKit.get(&PageCache&,&signInfo&);
if(map==null){
map = WebKit.getSignInfo();
CacheKit.put(&PageCache&,&signInfo&,map);
int thirdType = Integer.valueOf(map.get(&thirdType&));
int secret1 = Integer.valueOf(map.get(&secret1&));
String secret2 = map.get(&secret2&);
//上面代码为从缓存中取到我们需求传递到认证头的数据 下面开始添加认证头
SOAPHeaderElement head = new SOAPHeaderElement(new QName(&http://www.hzsun.com/&,&SecurityHeader&));
SOAPElement a1 = head.addChildElement(&ThirdType&);
a1.addTextNode(thirdType+&&);
a1 = head.addChildElement(&Secret1&);
a1.addTextNode(secret1+&&);
a1 = head.addChildElement(&Secret2&);
a1.addTextNode(secret2+&&);
head.setefix(&&);
head.setActor(null);
//head.setMustUnderstand(true);
} catch (SOAPException e) {
e.printStackTrace();
public static Map&String,String& getSignInfo(){
Map&String,String& singInfoCache = new HashMap&String,String&();
// 指出service所在URL
String endpoint = &http://xxx.xxx.xx.xx/ThirdWebservice.asmx&;
String targetNamespace = &http://www.hzsun.com/&;
String method=&SignIn&;
// 创建一个服务(service)调用(call)
Service service = new Service();
Call call = (Call) service.createCall();// 通过service创建call对象
// 设置service所在URL
call.setTargetEndpointAddress(new .net.URL(endpoint));
call.settionName(new QName(targetNamespace, method));
call.setUseSOAPAction(true);
Object ret = call.invoke(new Object[] {null});
System.out.println(ret.toString());
Map&String,String& out = call.getOutputParams();
if (out!=null){
Iterator&Entry&String,String&& it = out.entrySet().iterator();
while (it.hasNext()){
Entry&String,String& entry = (Entry&String,String&) it.next();
Object key = entry.getKey();
String parm = key.toString().replace(&{http://www.hzsun.com/}&, &&);
System.out.println(&key:&+parm);
System.out.println(&value:&+entry.getValue());
if(&stanum&.equalsIgnoreCase(parm)){
singInfoCache.put(&nStaNum&,entry.getValue().toString());
}else if(&thirdType&.equalsIgnoreCase(parm)){
singInfoCache.put(&thirdType&,entry.getValue().toString());
}else if(&secret1&.equalsIgnoreCase(parm)){
singInfoCache.put(&secret1&,entry.getValue().toString());
}else if(&secret2&.equalsIgnoreCase(parm)){
singInfoCache.put(&secret2&,entry.getValue().toString());
}catch(Exception e){
e.printStackTrace();
return singInfoC
getHoapHeader() &拿到认证头后 完整的调用GetAccInfo&代码实现
public void getAccInfoByAxis(){
String sIDNo = getPara(&sIDNo&);
String nIDType = getParaToInt(&nIDType&,4).toString();
List&Map&String, Object&& dataList = new ArrayList&Map&String, Object&&();
// 指出service所在URL
String endpoint = &http://xxx.xxx.xxx.xx/ThirdWebservice.asmx&;
String targetNamespace = &http://www.hzsun.com/&;
String method=&GetAccInfo&;
// 创建一个服务(service)调用(call)
Service service = new Service();
Call call = (Call) service.createCall();// 通过service创建call对象
// 设置service所在URL
call.setTargetEndpointAddress(new java.net.URL(endpoint));
call.setOperationName(new QName(targetNamespace, method));
call.setUseSOAPAction(true);
call.setSOAPActionURI(&http://www.hzsun.com/GetAccInfo&);
SOAPHeaderElement head = getHoapHeader();
//添加加密头验证加密因子
call.addHeader(head);
call.addParameter(new QName(targetNamespace,&sIDNo&),Constants.XSD_STRING,ParameterMode.IN);
call.addParameter(new QName(targetNamespace,&nIDType&),Constants.XSD_INT,ParameterMode.IN);
call.setReturnType(Type.XSD_STRING);
Object ret = call.invoke(new Object[] {sIDNo,nIDType});
Map out = call.getOutputParams();
if (out!=null)
Iterator ite=out.values().iterator();
while (ite.hasNext())
// System.out.println(&-------------&+(String)ite.next());
JSONObject jsonObject = JSONObject.fromObject((String)ite.next());
//返回json数据解析
if (jsonObject.has(&Table1&)) {
JSONArray transitListArray = jsonObject.getJSONArray(&Table1&);
for (int i = 0; i & transitListArray.size(); i++) {
Map&String,Object& innerMap = new HashMap&String,Object&();
JSONObject obj = JSONObject.fromObject(transitListArray.get(i));
Iterator it = obj.entrySet().iterator();
while(it.hasNext()){
Entry entry = (Entry) it.next();
innerMap.put(entry.getKey()+&&,entry.getValue());
dataList.add(innerMap);
}catch(Exception e){
e.printStackTrace();
renderJson(dataList);
第二种方式 & 直接发起http请求 拼接xml
同样以调用&GetAccInfo 为例
public String getSoapHeader(){
Map&String,String& map = CacheKit.get(&PageCache&,&signInfo&);
if(map==null){
map = WebKit.getSignInfo();
CacheKit.put(&PageCache&,&signInfo&,map);
int thirdType = Integer.valueOf(map.get(&thirdType&));
int secret1 = Integer.valueOf(map.get(&secret1&));
String secret2 = map.get(&secret2&);
//上面代码为从缓存中取到我们需求传递到认证头的数据 下面开始添加认证头
StringBuffer soapHeader = new StringBuffer();
soapHeader.append(&&soap:Header&&);
soapHeader.append(&&SecurityHeader xmlns=\&http://www.hzsun.com/\&&&);
soapHeader.append(&&ThirdType&&+thirdType+&&/ThirdType&&);
soapHeader.append(&&Secret1&&+secret1+&&/Secret1&&);
soapHeader.append(&&Secret2&&+secret2+&&/Secret2&&);
soapHeader.append(&&/SecurityHeader&&);
soapHeader.append(&&/soap:Header&&);
return soapHeader.toString();
请求参数正文
public String getAccInfoXml(String sIDNo, int nIDType){
StringBuffer template = new StringBuffer();
String header = getSoapHeader();
template.append(&&?xml version=\&1.0\& encoding=\&utf-8\&?&&soap:Envelope xmlns:xsi=\&http://www.w3.org/2001/XMLSchema-instance\& xmlns:xsd=\&http://www.w3.org/2001/XMLSchema\& xmlns:soap=\&http://schemas.xmlsoap.org/soap/envelope/\&&&);
template.append(header);
template.append(&&soap:Body&&);
template.append(&&GetAccInfo xmlns=\&http://www.hzsun.com/\&&&);
template.append(&&sIDNo&&+sIDNo+&&/sIDNo&&);
template.append(&&nIDType&&+nIDType+&&/nIDType&&);
template.append(&&/GetAccInfo&&);
template.append(&&/soap:Body&&);
template.append(&&/soap:Envelope&&);
return template.toString();
public void getAccInfo(){
String sIDNo = getPara(&sIDNo&);
int nIDType = getParaToInt(&nIDType&,4);
String dataJson = &&;
List&Map&String, Object&& dataList = new ArrayList&Map&String, Object&&();
String urlStr = &http://xxxx.xxx.xxx.xx/ThirdWebservice.asmx&;
String paraXml = getAccInfoXml(sIDNo, nIDType);
String soapAction =&http://www.hzsun.com/GetAccInfo&;
OutputStream out =
URL url = new URL(urlStr);
con = (HttpURLConnection) url.openConnection();
con.setDoOutput(true);
con.setDoInput(true);
con.setRequestMethod(&POST&);
con.setUseCaches(false);
con.setRequestProperty(&Content-type&, &text/ charset=UTF-8&);
//con.setRequestProperty(&WSS-Pass Type&, &PasswordText&);
con.setRequestProperty(&SOAPAction&, soapAction);
//con.setRequestProperty(&Encoding&, &UTF-8&);
out = con.getOutputStream();
con.getOutputStream().write(paraXml.getBytes());
out.flush();
out.close();
int code = con.getResponseCode();
String tempString =
StringBuffer sb1 = new StringBuffer();
if (code == HttpURLConnection.HTTP_OK) {
BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream(), &UTF-8&));
while ((tempString = reader.readLine()) != null) {
sb1.append(tempString);
if (null != reader) {
reader.close();
BufferedReader reader = new BufferedReader(new InputStreamReader(con.getErrorStream(), &UTF-8&));
// 一次读入一行,直到读入null为文件结束
while ((tempString = reader.readLine()) != null) {
sb1.append(tempString);
if (null != reader) {
reader.close();
//响应报文
String respData=sb1.toString();
int startDataTag = respData.indexOf(&&Data&&);
int endDataTag = respData.indexOf(&&/Data&&);
if(startDataTag!=-1&&endDataTag!=-1){
dataJson = respData.substring(respData.indexOf(&&Data&&)+6, respData.indexOf(&&/Data&&));
if(!&{Table1:[]}&.equals(dataJson)){
JSONObject jsonObject = JSONObject.fromObject(dataJson);
if (jsonObject.has(&Table1&)) {
JSONArray transitListArray = jsonObject.getJSONArray(&Table1&);
for (int i = 0; i & transitListArray.size(); i++) {
Map&String,Object& innerMap = new HashMap&String,Object&();
JSONObject obj = JSONObject.fromObject(transitListArray.get(i));
Iterator it = obj.entrySet().iterator();
while(it.hasNext()){
Entry entry = (Entry) it.next();
innerMap.put(entry.getKey()+&&,entry.getValue());
dataList.add(innerMap);
dataJson = respD
System.out.println(&结束&);
} catch (Exception e) {
e.printStackTrace();
renderJson(dataList);
优质网站模板

我要回帖

更多关于 webservice 安全认证 的文章

 

随机推荐