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);
}
} 展开
这段代码我在本机测试, 调用本机发布的一个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);
}
} 展开
1个回答
2013-05-29 · 知道合伙人数码行家
关注
展开全部
/**
* 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不想用框架, 我在学习
追答
是这样,我这段代码呢,是一个远程调用的例子,至于调用失败原因可能是传值错误。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询