服务器未能识别 HTTP 头 SOAPAction 的值 解决方案

import java.net.URL;
import java.util.Iterator;
import java.util.List;

import javax.xml.namespace.QName;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPBodyElement;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPMessage;
import javax.xml.ws.Dispatch;
import javax.xml.ws.Service;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Node;

public class WsUtilsTest {
	/**
	 * 用java自带的api调用相应的webservice接口
	 * @param args
	 * @throws Exception
	 */
	public static void main(String[] args) throws Exception {
        URL url = new URL("http://192.168.11.98/TEST/Service.asmx?wsdl");
        //                接口名称
        QName sname = new QName("http://tempuri.org/", "EmrService");
        Service service = Service.create(url, sname);

        Dispatch<SOAPMessage> dispatch = service.createDispatch(new QName("http://tempuri.org/", "EmrServiceSoap"),
                SOAPMessage.class, Service.Mode.MESSAGE);
        //这句话很重要,否则报错服务器未能识别 HTTP 头 SOAPAction 的值
        dispatch.getRequestContext().put("javax.xml.ws.soap.http.soapaction.uri", "http://tempuri.org/HelloWorld");

        SOAPMessage msg = MessageFactory.newInstance().createMessage();
        SOAPEnvelope envelope = msg.getSOAPPart().getEnvelope();
        SOAPBody body = envelope.getBody();
        //得到要调用的方法
        QName ename = new QName("http://tempuri.org/", "HelloWorld");
        SOAPBodyElement ele = body.addBodyElement(ename);
        QName ename1 = new QName("http://tempuri.org/", "strPatientId");
        ele.addChildElement(ename1).setValue("好人");
        //                msg.writeTo(System.out);
        //        System.out.println("");
        SOAPMessage response = dispatch.invoke(msg);
        //        response.writeTo(System.out);
        SOAPBody soapBody = response.getSOAPPart().getEnvelope().getBody();
        soapBody.getAttributeNode("HelloWorldResult");
        System.out.println("ffff===" + soapBody.getElementsByTagName("HelloWorldResult").item(0).getTextContent());
        //        org.w3c.dom.Document doc = response.getSOAPPart().getEnvelope().getBody().extractContentAsDocument();
        //这里输入的"loginResult"就是Web服务端定义的login()方法的返回值名称  
        //        System.out.println("\n收到响应:" + doc.getElementsByTagName("HelloWorldResult").item(0).getTextContent());
        //        String result = String.format("%1$20s", "abc");
        //        System.out.println(result);
    }
}

//这句话很重要,否则报错服务器未能识别 HTTP 头 SOAPAction 的值
        dispatch.getRequestContext().put("javax.xml.ws.soap.http.soapaction.uri", "http://tempuri.org/HelloWorld");


微笑


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值