java - 遍历来自属性文件的SOAP请求

原文 标签 java web-services soap properties configuration

我正在编写一个Java插件,打算用来测试许多Web服务。这些用于Web服务的SOAP位于属性文件中,并按其所属的WSDL(订户,网络,用户等)分组。此外,还有一些与每个Web服务相关联的正则表达式来测试响应。

Properties Example

#Web services to be tested and regexes to test responses
 #List of web service groups used (WSDLs)
 webservice.list = SubscriberMgmt,NetworkMgmt

 # < -- SubscriberMgmt -- >
 #getSubscriberDevices
 webservice.subscriber = <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.blah.blah.com"><soapenv:Header/><soapenv:Body><ws:getSubscriberDevices><PhoneNumber></PhoneNumber><LastName></LastName><MACAddress></MACAddress><ExternalId></ExternalId><AccountExternalId>john</AccountExternalId><IPAddress></IPAddress></ws:getSubscriberDevices></soapenv:Body></soapenv:Envelope>
 webservice.SubscriberMgmt.regex = subscriberId="(.+?)"
 webservice.SubscriberMgmt.regex.1 = externalId="(.+?)"

 #getMpegResultsById
 webservice.subscriber.1 = <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.blah.blah.com"><soapenv:Header/><soapenv:Body><ws:getMpegResultsById><SubscriberId>100016</SubscriberId><Duration>2880</Duration></ws:getMpegResultsById></soapenv:Body></soapenv:Envelope> 
 webservice.SubscriberMgmt.1.regex = id="(.+?)"
 webservice.SubscriberMgmt.1.regex.1 = externalId="(.+?)"


我目前有代码可以使用属性文件中的每个WSDL进行连接,所以说当'webservicegroup'变量为SubscriberMgmt时,我想测试.subscriber Web服务并检查响应是否包含相应的regex( es)。 (“数据”变量目前仅对应于来自属性文件的一个SOAP请求)

//Soap Request
        try
        {
            for(String webservicegroup : webserviceList)
            {
                URL url = new URL("http://" + server + "/webservices/" + webservicegroup);
                URLConnection conn = url.openConnection();
                conn.setDoOutput(true);
                conn.setRequestProperty("Content-type", "text/xml; charset=utf-8");
                conn.setRequestProperty("SOAPAction", "\"\"");
                String loginEnc = new BASE64Encoder().encodeBuffer((username + ":" + password).getBytes());
                loginEnc = loginEnc.replaceAll("\n", "");
                conn.setRequestProperty("Authorization", "Basic " + loginEnc);
                conn.setConnectTimeout(timeout);
                conn.setReadTimeout(timeout);

                OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());

                //Send request
                wr.write(data);
                wr.flush();
                wr.close();
                BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));

                //Save response
                String line;

                while ((line = in.readLine()) != null)
                {
                    response += line;
                }
                in.close();
            }
        }


关于最佳方法的任何想法吗?任何帮助是极大的赞赏

最佳答案

假设您的连接和POST / GET代码有效:

步骤1:将整个响应作为字符串获取:

String response = new String(ByteStreams.toByteArray(inputStream), "UTF-8");


在上面的代码行中,ByteStreams类是Google的番石榴库的一部分。如果愿意,可以在apache commons-io中找到类似的代码。

步骤2:测试正则表达式:

if( response.matches(regex) ) { ... }

关于java - 遍历来自属性文件的SOAP请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17169637/

相关文章:

java - 从 JAR 目录读取属性文件

android - 您如何在android中调用网络服务,以便即使 Activity 在后台也能继续等待响应?

database - .NET CF 移动设备应用程序 - 处理潜在离线性的最佳方法?

java - UMLGraph中是否有任何注释和注释替代方法

java - 如何将Cobertura与Cucumber jvm和Maven结合使用?

java - 在Eclipse动态Web项目中包含HTML文件

xml - SOAP::Lite 生成 <c-gensym .. > 我如何摆脱它?

java - 使用httpClient创建HttpComponentsMessageSender

java - 在Java中使用.asmx Web服务吗?

java - 什么是 Spring 的“基于继承的代理”