Java使用SOAP调用WebService

1、webservice三要素
Webservice三要素包括:SOAP、WSDL、UDDI
soap用来描述传递信息的格式;
wsdl用来描述如何访问具体的接口
uudi用来管理,分发,查询webservice。
soap使用基于XML的数据结构和超文本传输协议(HTTP)的组合定义了一个标准的方法来使用INternet上各种不同操作环境中的分布式对象;
2、相关定义:
1、基于类对象的传输协议
2、soap封装(envlop),定义了一个框架,描述消息中的内容是什么,是谁发送的,
应当接受并处理它以及如何处理他们;
3、soap编码规则(encoding rules),定义了一种序列化机制,用于标识应用程序需要使用的数据类型的实例;
4、soap rpc 表示,它定义了一个协定,用于标识远程过程中调用和应答;
5、soap 绑定(binding),定义了soap使用哪种协议交换性喜,使用HTTP/TCP/UDP协议都可以;
3、构建模块
一条 SOAP 消息就是一个普通的 XML 文档,包含下列元素:
必需的 Envelope 元素,可把此 XML 文档标识为一条 SOAP 消息
可选的 Header 元素,包含头部信息
必需的 Body 元素,包含所有的调用和响应信息
可选的 Fault 元素,提供有关在处理此消息所发生错误的信息
4、语法规则
SOAP 消息必须用 XML 来编码
SOAP 消息必须使用 SOAP Envelope 命名空间
SOAP 消息必须使用 SOAP Encoding 命名空间
SOAP 消息不能包含 DTD 引用
SOAP 消息不能包含 XML 处理指令
5、优点:
1、可扩展的
2、简单的
3、万泉河厂商无关
4、与编程语言无关
5、与平台无关

6、功能实现
1、定义访问地址,以及调用的方法名称

 //地址
    String urlString = "http://124.114.156.246:18010/WmsJcspzl.asmx?wsdl";
    //方法
    String soapActionString = "http://ws.jcspzl/ReceiveJcspzl";

2、连接请求路径,拼接请求体

 URL url = new URL(urlString);
    HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
    //拼接请求体
	String soap = ""
			+"<?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/\">"
			+"<soap:Body>"
			+"<ReceiveJcspzl xmlns=\"http://ws.jcspzl\">"
			+"<I_REQUEST>"
			 +"  </I_REQUEST>"
	        +" </ReceiveJcspzl>"
	        +"  </soap:Body>"
	        +"</soap:Envelope>";

3、设置请求头参数(重点)

 byte[] buf = soap.getBytes();
    //设置一些头参数
    httpConn.setRequestProperty("Content-Length", String.valueOf(buf.length));
    httpConn.setRequestProperty("Content-Type", "text/xml; charset=utf-8");
    httpConn.setRequestProperty("SOAPAction", soapActionString);
    httpConn.setRequestMethod("POST");

4、打印响应结果,并进行处理

//输入参数和输出结果
    httpConn.setDoOutput(true);
    httpConn.setDoInput(true);
    OutputStream out = httpConn.getOutputStream();
    out.write(buf);
    out.close();
    
    byte[] datas = readInputStream(httpConn.getInputStream());
    String result = new String(datas);
    String a=result.replaceAll("&gt;", ">").replaceAll("&lt;", "<");
   return a;

5、结果字符串进行xml格式转换

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
    <ReceiveJcspzlResponse
        xmlns="http://ws.jcspzl">
        <ReceiveJcspzlResult>
            <?xml version="1.0" encoding="utf-8"?>
            <DATA>
                <RETDATA>
                    <DANJ_NO>20190824000147</DANJ_NO>
                    <HANGHAO></HANGHAO>
                    <ZFLAG>S</ZFLAG>
                    <ZMESSAGE></ZMESSAGE>
                </RETDATA>
            </DATA>
        </ReceiveJcspzlResult>
    </ReceiveJcspzlResponse>
</soap:Body>
</soap:Envelope>
  • 1
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
您好!将 JSON 转换为 SOAP 的过程需要进行多个步骤,可以按照以下步骤进行实现: 1. 创建一个类来处理 JSON 数据并将其转换为 SOAP 格式。这个类可以使用一些开源库,比如 Jackson 或 Gson 来处理 JSON 数据。 2. 创建一个类来处理 SOAP 请求,并使用 SOAP 库(如 Apache Axis 或 Apache CXF)来构建 SOAP 请求和响应。 3. 在处理 JSON 数据的类中,将 JSON 数据转换为 Java 对象,并使用 Java 对象来填充 SOAP 请求的参数。 4. 发送 SOAP 请求并获得响应,将响应转换为 JSON 数据并返回给客户端。 以下是一个示例代码,它使用 Jackson 库将 JSON 数据转换为 SOAP 请求: ```java import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.axis.client.Call; import org.apache.axis.client.Service; import org.apache.axis.encoding.XMLType; import javax.xml.namespace.QName; import javax.xml.rpc.ParameterMode; import java.rmi.RemoteException; import java.util.HashMap; import java.util.Map; public class JsonToSoapConverter { public static String convert(String json, String endpoint, String namespace, String method) throws Exception { ObjectMapper mapper = new ObjectMapper(); Map<String, Object> data = mapper.readValue(json, HashMap.class); Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress(endpoint); call.setOperationName(new QName(namespace, method)); call.setUseSOAPAction(true); call.addParameter("parameters", XMLType.XSD_ANYTYPE, ParameterMode.IN); call.setReturnType(XMLType.XSD_ANYTYPE); Object[] params = new Object[] { data }; Object result = call.invoke(params); return mapper.writeValueAsString(result); } } ``` 在上述示例代码中,我们使用 Jackson 库将输入的 JSON 数据转换为 Map 对象,并将 Map 对象作为参数传递给了 SOAP 请求。我们还指定了 SOAP 请求的 endpoint、namespace 和 method,以及 SOAP 请求和响应的数据类型(在本示例中,我们使用了 XMLType.XSD_ANYTYPE)。最后,我们通过调用 invoke() 方法来发送 SOAP 请求,并使用 Jackson 库将响应转换为 JSON 数据并返回给客户端。 希望这个答案能够对您有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值