测试用类
package test.com.coverage.facade;
import java.util.HashMap;
import java.util.Map;
import javax.annotation.Resource;
import org.junit.Assert;
import org.junit.Test;
import test.com.coverage.CoverageBase;
import com.common.facade.TransManageFacade;
import com.common.facade.bean.TransRefundReq;
import com.common.facade.bean.TransRefundRes;
import com.common.facade.constants.SysRetCodeConstants;
public class TestManageTransRefund extends CoverageBase
{
public static String FILE_PREFIX="/soapUI/facade";
@Resource(name="transManageFacade")
public TransManageFacade transManageFacade;
@Test
public void testRefund() throws Exception
{
String xmlFile = FILE_PREFIX+"/refundRequest.xml";
Map<String,String> param=new HashMap<String,String>();
param.put("orderNo",Long.toString(System.currentTimeMillis()));
TransRefundReq req = super.parseRequest(xmlFile,param,TransRefundReq.class);
TransRefundRes res = transManageFacade.manageTransRefund(req);
Assert.assertSame(SysRetCodeConstants.SYSTEM_ERROR.getCode(), res.getRespCode());
}
}
引入上线文的类
package test.com.coverage;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.support.GenericApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration( {
"classpath*:/spring/applicationContext-load-config.xml",
"classpath*:/spring/applicationContext*.xml",
"classpath*:/spring/datasource.xml",
"classpath*:/mq/mq*.xml",
"classpath*:/mq/applicationContext*.xml",
"classpath*:/ws/applicationContext*.xml",
"classpath*:/interceptor/applicationContext*.xml",
})
public class CoverageBase extends SoapUIBase
{
@Autowired
public GenericApplicationContext applicationContext;
}
对象转类;
被xml转的对象要对class加注解@XmlRootElement--javax.xml.bind.annotation.XmlRootElement
package test.com.coverage;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.io.StringWriter;
import java.net.URL;
import java.nio.charset.Charset;
import java.util.Map;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.MimeHeaders;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPConnection;
import javax.xml.soap.SOAPConnectionFactory;
import javax.xml.soap.SOAPMessage;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.apache.log4j.Logger;
import org.apache.log4j.xml.DOMConfigurator;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
public class SoapUIBase
{
public Logger log = Logger.getLogger(SoapUIBase.class);
protected static final String HOST_PREFIX="http://127.0.0.1:8080";
//protected static final String HOST_PREFIX="http://192.168.0.184:8080"; //Dev环境
/**
*
*
* @param classPathFile soapUI的XML文件
* @param param 替换参数用的Map
* @return
* @throws Exception
*/
private SOAPMessage convertString2SOAP(String classPathFile,Map<String,String> param) throws Exception
{
String prefix="${";
String suffix="}";
InputStream input=SoapUIBase.class.getResourceAsStream(classPathFile);
if(input==null)
{
log.error("========error====="+classPathFile+" 找不到");
throw new FileNotFoundException(classPathFile+"找不到");
}
BufferedReader reader=new BufferedReader(new InputStreamReader(input));
String line;
StringBuffer soapBuffer=new StringBuffer();
while((line=reader.readLine())!=null)
{
if(param!=null && line.contains(prefix) )
{
String key=line.substring(line.indexOf(prefix)+prefix.length(), line.indexOf(suffix));
if(param.get(key)!=null)
{
line=line.replace( prefix+key+suffix , param.get(key));
}else
{
log.error("========error=====文件classPathFile中的变量 "+key+" 未配置");
throw new Exception("文件classPathFile中的变量 "+key+" 未配置");
}
}
soapBuffer.append(line).append("\n");
}
SOAPMessage reqMsg = MessageFactory.newInstance().createMessage(new MimeHeaders(), new ByteArrayInputStream(soapBuffer.toString().getBytes(Charset.forName("UTF-8"))));
reqMsg.saveChanges();
//log.info(classPathFile+"解析后的请求内容为----------\n"+soapBuffer);
//reqMsg.writeTo(System.out);
return reqMsg;
}
private String convertSOAP2String(SOAPMessage msg) throws Exception
{
Document doc = msg.getSOAPPart().getEnvelope().getOwnerDocument();
StringWriter output = new StringWriter();
Transformer transformer=TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "3");
transformer.transform(new DOMSource(doc), new StreamResult(output));
log.info("---------响应 \n"+output.toString());
return output.toString();
}
protected String invokeWebService(String soapUIFile,String serviceURL,Map<String,String> param) throws Exception
{
initLog4j();
SOAPMessage reqMsg =convertString2SOAP(soapUIFile,param);
SOAPConnection connection = SOAPConnectionFactory.newInstance().createConnection();
SOAPMessage responseMsg = connection.call(reqMsg, serviceURL);
String res=convertSOAP2String(responseMsg);
return res;
}
/**
*
*
* @param classPathFile soapUi文件地址
* @param param 转换参数Map
* @param type 目标对象类型
* @return
* @throws Exception
*/
protected <T> T parseRequest(String classPathFile,Map<String,String> param,Class<T> type) throws Exception
{
initLog4j();
SOAPMessage soap=this.convertString2SOAP(classPathFile, param);
SOAPBody body=soap.getSOAPBody();
Element wrongParam=(Element)body.getElementsByTagName("arg0").item(0);
Document doc=wrongParam.getOwnerDocument();
String simpleName=type.getSimpleName();//大写
String lowerName=simpleName.substring(0, 1).toLowerCase()+simpleName.substring(1, simpleName.length());
Element paramName=doc.createElement(lowerName);
NodeList list=wrongParam.getChildNodes();
for(int i=0;i<list.getLength();i++)
{
paramName.appendChild(list.item(i).cloneNode(true) );
}
StringWriter output = new StringWriter();
Transformer transformer=TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "3");
transformer.transform(new DOMSource(paramName), new StreamResult(output));
log.info(classPathFile+"---------解析的 [请求] 对象参数 \n"+output.toString());
JAXBContext context=JAXBContext.newInstance(type);
Unmarshaller unmarshaller=context.createUnmarshaller();
T req=(T) unmarshaller.unmarshal(new StringReader(output.toString()));
return req ;
}
private void initLog4j()
{
System.setProperty("log_home","c:/log");
URL url=SoapUIBase.class.getResource("/log4j.xml");
DOMConfigurator.configure(url);
}
}
POM.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com</groupId>
<artifactId>tcoreptms</artifactId>
<version>1.0.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<groupId>com.test</groupId>
<artifactId>tcoreptms-test</artifactId>
<packaging>jar</packaging>
<name>test Desc</name>
<dependencies>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<dependency>
<groupId>org.easymock</groupId>
<artifactId>easymock</artifactId>
<version>3.2</version>
</dependency>
<dependency>
<groupId>com..biz</groupId>
<artifactId>tcoreptms-biz</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<!-- <plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<configuration>
<destFile>${sonar.jacoco.itReportPath}</destFile>
</configuration>
<executions>
<execution>
<id>post-test</id>
<configuration>
<skip>true</skip>
</configuration>
</execution>
</executions>
</plugin> -->
</plugins>
</build>
</project>
分享到:
相关推荐
压缩包中的文件“www.pudn.com.txt”可能包含的是有关JSON转换为SOAP或者反之的详细教程、代码示例或资源链接,而“json”文件可能是JSON相关的源码、配置文件或是测试数据。 在实际开发中,使用Java进行JSON操作时...
5. **JAXB**:利用JAXB将Java对象转换为XML,反之亦然,用于构建或解析SOAP消息。 6. **Base64编码**:理解Base64编码的原理和使用,知道如何在Java中实现编码和解码。 7. **测试Web服务**:使用JUnit或其他测试框架...
Spring-WS 是一个基于 Java 的开源框架,专门设计用于创建 SOAP(简单对象访问协议)Web 服务。它基于模型-视图-控制器(MVC)架构模式,提供了构建和消费 SOAP 消息的高级抽象。Spring-WS 强调契约优先的方法,这...
在开发Web服务时,SOAP(简单对象访问协议)是一种广泛使用的通信协议,它允许应用程序通过HTTP进行通信。Apache CXF是一个开源框架,专门用于构建和部署SOAP和RESTful Web服务。本教程将介绍如何利用CXF和Maven来...
Spring Web Services 是一个基于 Java 的框架,专门设计用于构建 SOAP(简单对象访问协议)Web 服务。这个项目展示了如何利用 Spring 框架创建和保护 SOAP Web 服务的全过程。SOAP 是一种流行的协议,用于在分布式...
9. **JUnit**:尽管不是专门用于Web服务开发,Junit是一个用于单元测试的Java库,帮助开发者验证代码功能。在Axis项目中,它可能用于测试Web服务接口的正确性。对应的JAR文件是junit.jar。 10. **Ant或Maven**:...
Spring-WS是一个基于Java的轻量级Web服务框架,它专注于提供SOAP协议的支持,用于创建和消费Web服务。本示例代码将展示如何利用Spring-WS进行Web服务的开发和调用,涉及到的关键技术包括XSD(XML Schema Definition...
以及JUnit,一个用于编写和运行单元测试的框架。 总结来说,Java的工具包丰富多样,能够满足各种开发需求。`XmlSchema-1.4.7.jar`作为其中之一,专注于XML Schema处理,是Java开发中处理XML数据的重要工具。了解并...
1. **SOAP(简单对象访问协议)**:SOAP是一种基于XML的协议,用于在Web上交换结构化和类型化的信息。它是Web服务的基础,定义了消息结构和如何通过HTTP、SMTP等传输协议发送这些消息。 2. **WSDL(Web服务描述语言...
1. **JAX-WS (Java API for XML Web Services)**: 这是Java平台上的标准API,用于创建和消费SOAP Web服务。它包括了处理WSDL(Web Services Description Language)和XML Schema的能力,使得开发者能方便地定义服务...
WSDL文件包含了服务的端点(或地址)、操作(或服务方法)、输入和输出消息的定义,以及绑定信息,这些信息用于定义服务如何通过网络进行通信,通常是HTTP或SOAP协议。 在Eclipse中,我们可以利用其内置的工具来...
GSoap是开源的C/C++库,用于构建SOAP(简单对象访问协议)服务和客户端,允许通过HTTP进行XML数据交换。 在Java中调用C++生成的GSoap Web服务时,主要涉及以下几个关键知识点: 1. **SOAP协议**:SOAP是一种基于...
这两个框架主要用于构建和消费SOAP(简单对象访问协议)Web服务。以下是关于这些技术的详细说明: **Axis1**: Axis1是Apache软件基金会开发的一个开源SOAP栈,它允许开发者创建和部署Web服务。 Axis1提供了全面的...
WebService通常基于XML和SOAP协议,并且可以通过WSDL文件来描述其接口和服务。 #### 三、准备工作 1. **建立工程目录**:创建项目结构,包括src、lib等基本目录。 2. **准备工程资源**: - **Hibernate资源**:...
1. **SOAP协议**:简单对象访问协议(SOAP)是一种轻量级的消息协议,用于交换结构化的、独立于语言的信息。SOAP消息通常以XML格式封装,并通过HTTP进行传输。 2. **WSDL**:Web服务描述语言(WSDL)是SOAP服务的...
3. **Hibernate ORM**:用于处理数据库操作的对象关系映射框架,可以将Java对象和数据库表之间的映射关系自动化,减少数据库操作的复杂性。 4. **Servlet和JSP**:作为Java Web开发的基础,Servlet处理HTTP请求,...
1. **SOAP协议**:如果HrService是基于SOAP(简单对象访问协议)的Web服务,那么`HrServiceClient`可能会使用CXF来生成客户端代理,该代理能发送SOAP请求并接收响应。这通常涉及到WSDL(Web服务描述语言)文件,它是...
Web服务的核心标准主要包括WSDL(Web服务描述语言)、SOAP(简单对象访问协议)和UDDI(统一描述、发现和集成)。WSDL用于定义服务接口,包括服务提供的操作、消息格式和调用地址。SOAP是用于交换结构化信息的协议,...
首先,我们要明白Axis的核心功能:它是Java平台上的一套Web服务框架,支持SOAP(简单对象访问协议)和WSDL(Web服务描述语言),使得开发者能够方便地创建、发布和使用Web服务。在Axis中,`lib`目录下的库文件扮演着...
JUnit和Mockito等工具可用于单元测试,而像SoapUI这样的工具专门用于SOAP和RESTful服务的端到端测试。 10. **部署和监控** 最后,部署Web服务到生产环境并进行监控是确保服务稳定性的必要步骤。Tomcat、Jetty等...