java使用原生soap调用webservice报错: 服务器未能识别 HTTP 头 SOAPAction 的值: .

各位大神求助,我发送soap消息调用webservice报错,提示:Exceptioninthread"main"javax.xml.ws.soap.SOAPFaultE... 各位大神求助, 我发送soap消息调用webservice报错, 提示: Exception in thread "main" javax.xml.ws.soap.SOAPFaultException: 服务器未能识别 HTTP 头 SOAPAction 的值: 。

这段代码我在本机测试, 调用本机发布的一个webservice调用成功的, 但是调用一个外网的webservice就报错, 我用可视化工具调用那个外网的webservice是成功的, 用cxf调用也是成功的, 但是用这段代码就报错, 求大神指点, 代码如下:

import java.net.URL;

import javax.xml.*;

import org.w3c.dom.Document;

public class TestSoap {

private static String ns = "http://WebXml.com.cn/";
private static String wsdlUrl = "http://webservice.webxml.com.cn/WebServices/ValidateEmailWebService.asmx?wsdl";

public static void main(String[] args) throws Exception {
URL url = new URL(wsdlUrl);
QName sname = new QName(ns, "ValidateEmailWebService");
Service service = Service.create(url, sname);

Dispatch<SOAPMessage> dispatch = service.createDispatch(new QName(ns, "ValidateEmailWebServiceSoap"), SOAPMessage.class, Service.Mode.MESSAGE);

SOAPMessage msg = MessageFactory.newInstance().createMessage();
SOAPEnvelope envelope = msg.getSOAPPart().getEnvelope();
SOAPBody body = envelope.getBody();

QName ename = new QName(ns, "ValidateEmailAddress", "nn");
SOAPBodyElement ele = body.addBodyElement(ename);
ele.addChildElement("theEmail").setValue("541241544@qq.com");
msg.writeTo(System.out);

System.out.println();

SOAPMessage response = dispatch.invoke(msg);
response.writeTo(System.out);
}
}
展开
 我来答
小童鞋_成er
2013-05-29 · 知道合伙人数码行家
小童鞋_成er
知道合伙人数码行家
采纳数:4650 获赞数:22879
主要从事J2EE工作,热爱Java,用心讨论技术,共同进步。

向TA提问 私信TA
展开全部
/**
 * wsdl接口远程调用方法
 * @param url  接口地址
 * @param OperationName //需要调用的方法
 * @param xml //报文
 * @return 返回的报文
 */
public String getWSDLCall(String url, String OperationName, String xml){
String result = "";
try {
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(url);
call.setOperationName(OperationName);//WSDL里面描述的接口名称
call.addParameter("xml", org.apache.axis.encoding.XMLType.XSD_DATE,
javax.xml.rpc.ParameterMode.IN);//接口的参数
call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);//设置返回类型 
result = (String)call.invoke(new Object[]{xml});
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return result;
}
更多追问追答
追问
请问我的那段代码为什么会调用失败呢, 我想用原生soap不想用框架, 我在学习
追答
是这样,我这段代码呢,是一个远程调用的例子,至于调用失败原因可能是传值错误。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式