1. 程式人生 > >註解的方式釋出介面,解析XML及返回

註解的方式釋出介面,解析XML及返回

/*獲取通過WebService傳過來的xml,資料校驗通過解析後儲存到資料庫返回一個xml,資料校驗不通過也返回一個XML*/

import java.sql.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;

import javax.jws.WebMethod;
import javax.jws.WebResult;
import javax.jws.WebService;

import org.apache.commons.lang.StringUtils;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import com.*.user;
import com.*.util.api.DtoUtil;
import com.neusoft.agileggfw.webservice.internal.cc22.Cc22Service;
import com.neusoft.agileggfw.webservice.internal.xml.XMLBandingData;

/*
 * 這裡是通過SpringMVC 整合CXF方式釋出的介面; 
 * serviceName 為介面名;
 * uploadUserInfo 為實現方法
 * 
 * */

@Component
@WebService(serviceName = "/testJws", targetNamespace = "www.testJws.gov.cn")
public class JwsServiceImpl implements JwsService{
	
	
	@Autowired
	private user userdao;

	@Autowired
	private XMLBandingData xmlbandingdata;
	

	@WebMethod
	@WebResult(targetNamespace = "www.testJws.gov.cn")
	@Transactional
	@Override
	public String uploadUserInfo(String xmlInput) {
		//1.解析xmlInput
		UserDto dto =resolveXml(xmlInput);
		//2.校驗
		String errorMsg=checkIsNotNull(dto);
		User user=new User();
		//插入資料庫中的User表中,此處省略
		if(StringUtils.isBlank(errorMsg)){
			
			//DtoUtil是一個複製dto的工具類,此處省略,這一段程式碼主要是儲存解析及校驗後的XML到資料庫中
			DtoUtil.copyProperties(dto, user);
			userdao.save(user);
		}
		//4.返回XML
		return xmlbandingdata.bandingUser(errorMsg);
	}
		private String checkIsNotNull(UserDto dto) {
		String errorMsg="";
		
		if(StringUtils.isBlank(dto.getUsername())){
			errorMsg+="使用者名稱不能為空,";
		}
		if(StringUtils.isBlank(dto.getId())){
			errorMsg+="編號不能為空,";
		}
		
		
		return errorMsg;
	}

	private UserDto resolveXml(String xmlInput) {
		UserDto dto = new UserDto();
		try {
			Document document = DocumentHelper.parseText(xmlInput);
			Element root = document.getRootElement();
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
			Element USERNAME = root.element("username");//姓名
			if(USERNAME!=null){
				dto.setUsername(USERNAME.getText());
			}
			Element ID = root.element("id");//個人編號
			if(ID!=null){
				dto.setId(ID.getText());//
			}
			
			
			
		} catch (Exception e) {
			 e.printStackTrace();
		}
		return dto;
	}

}




/*介面類*/




import java.text.ParseException;

import javax.jws.WebMethod;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.xml.ws.BindingType;
import javax.xml.ws.soap.SOAPBinding;

/*@WebMethod(operationName = "uploadUserInfo") 為介面向外提供的呼叫方法*/

@WebService(targetNamespace = "www.testJws.gov.cn", name = "testJWS")
@BindingType(value = SOAPBinding.SOAP11HTTP_BINDING)
public interface JwsService {
	@WebResult(targetNamespace = "www.testJws.gov.cn", name = "testjavaWbs")
	@WebMethod(operationName = "uploadUserInfo")
	String uploadUserInfo(String xmlInput) throws ParseException; 
}





import org.springframework.stereotype.Repository;

import com.*.User;
import com.*.PlatformDao;

import java.io.IOException;
import java.io.InputStream;
import java.io.Serializable;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.sql.Blob;
import java.sql.Clob;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.annotation.Resource;
import javax.sql.DataSource;

import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.CriteriaSpecification;
import org.hibernate.criterion.Projection;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.hibernate.internal.CriteriaImpl;
import org.hibernate.internal.SessionImpl;
import org.hibernate.transform.ResultTransformer;
import org.hibernate.transform.Transformers;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.ConnectionCallback;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.util.Assert;
import org.springframework.web.multipart.MultipartFile;

public abstract class PlatformDao<T>{

	@Resource(name = "sessionFactory")
	private SessionFactory sessionFactory;

	@Resource(name = "dataSource")
	private DataSource dataSource;

	protected abstract Class<T> getEntityClass();
	
}




public class Cc22Dto{
	
	
	private String username;
	private String id;
	
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
}


/*
 * 對應的實體和hebinate對映此處省略
 * User.java
user.hbm.xml
等*/

/*以上通過SpringMVC與cxf整合後釋出,此處略,這裡是在本地tomcat中釋出的*/



/*客戶端呼叫以上介面
 * 這裡也是用SpringMVC的方式呼叫,其他方式略
 * */





import java.text.ParseException;

import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;

import com.*。JwsService;



public class TestClient {
	
	public static void main(String[] args) {
		JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
		factory.setServiceClass(JwsService.class);
		factory.setAddress("http://localhost:8080/services/testJWS?wsdl");
		JwsService client = (JwsService) factory.create();
		String inputXml="<?xml version='1.0' encoding='UTF-8'?>"+
		   "<row>"+
		     "<getType>testJWS</getType>"+
             "<username>username</username>"+
             "<id>8888</id>"+                
		   "</row>";	
	
		try {
			client.uploadUserInfo(inputXml);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	
}




import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringWriter;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.sql.Blob;
import java.sql.Date;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.List;

import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.lang.StringUtils;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import org.springframework.stereotype.Service;


@Service
public class XMLBandingData {

	public String bandingUser(String errorMsg) {
		Document document = DocumentHelper.createDocument();
		Element results = document.addElement("results");
		Element WEBNAME = results.addElement("WEBNAME");  //介面名稱
		WEBNAME.addText("testJWS");       
		Element lastTime = results.addElement("lastTime");  //返回時間
		lastTime.addText(DateUtil.getDate().toString());
		Element state = results.addElement("state");    //狀態:1--成功    0--失敗
		if(StringUtils.isBlank(errorMsg)){
			state.addText("1");
		}else{
			state.addText("0");
		}
		Element errorMsg1 = results.addElement("errorMsg");   //錯誤資訊
		errorMsg1.addText(errorMsg);
		StringWriter sw = new StringWriter();
		OutputFormat format = OutputFormat.createPrettyPrint();
		XMLWriter writer = new XMLWriter(sw, format);
		try {
			writer.write(document);
		} catch (IOException e) {
			e.printStackTrace();
		}
		return sw.toString();
	}
}
<!--  入參 -->
<?xml version="1.0" encoding="UTF-8"?>
<row>	         
<getType>testJWS</getType>						//介面名稱
		<username>username</username> 					
	    	<id>8888</id>     	//
		  	
		……
		……       
	</row>
<!--出參 -->

<?xml version="1.0" encoding="UTF-8"?>
<results>
  <webName> testJWS</webName >								//介面名稱
  <lastUpdate>2015-04-09 17:23:59</lastUpdate>		//返回時間
  <state>1</state>  //狀態
  <errorMsg></errorMsg>									//錯誤資訊
</results>



以上主要描述釋出介面對接收到的XML處理方法及返回xml.

相關推薦

註解方式釋出介面,解析XML返回

/*獲取通過WebService傳過來的xml,資料校驗通過解析後儲存到資料庫返回一個xml,資料校驗不通過也返回一個XML*/ import java.sql.Date; import java.text.ParseException; import java.text

Python中使用SAX解析XML例項

在學習廖雪峰老師的Python教程時,學到了難以理解的關於SAX解析XML這一節。本文將從此節出發,逐句的分析此節的作業。其中作業來源於網友評論。 SAX解析XML速度快、佔用記憶體小。我們只需要關注三個事件:start_element、end_element

Android中三種常用解析XML方式(DOM、SAX、PULL)簡介區別

字符串 lan win name屬性 Coding 空間 toc log fin XML在各種開發中都廣泛應用,Android也不例外。作為承載數據的一個重要角色,如何讀寫XML成為Android開發中一項重要的技能。今天就由我向大家介紹一下在Android平臺下幾種常見的

VB呼叫WebService(直接Post方式)並解析返回XML

Function TodoTaskBySOAP(postURL As String,host As String, n As Integer,FilterItem() As String,OwnerSSICID() As String ,AppID() As String

Java接收Cordys中webservice介面返回資料並解析xml獲取相應節點資料

在做專案的過程中,需要用Java呼叫Cordys的webservice介面的返回資料,眾所周知,webservice返回的資料是xml形式的,那麼我們怎樣獲取相關節點下的資料呢? 處理之前返回的資料格式如下: <soap:Envelope xmln

ibatis annotations 註解方式返回剛插入的自增長主鍵ID的值--轉

ice summary use 文件的 per 自動 問答 ner generate 原文地址:http://www.blogs8.cn/posts/WWpt35l mybatis提供了註解方式編寫sql,省去了配置並編寫xml mapper文件的麻煩,今天遇到了獲取自增

網絡相關系列之四:數據解析之SAX方式解析XML數據

request nco nodename 新建 作用 call 其他 auto 文件內容 一、XML和Json數據的引入: 通常情況下。每一個須要訪問網絡的應用程序都會有一個自己的server。我們能夠向server提交數據,也能夠從server獲取數據。

pULL方式解析XML的問題

解析xml and google pull hao123 XML 問題 .com music %E6%B7%B1%E5%85%A5%E6%B5%85%E5%87%BAGOOGLEaNDROID http://music.baidu.com/songlist/4956263

spring AOP解析註解方式詳解

parser 分享 pro asp mes aop log space spec 命名空間處理器是AopNamespaceHandler,我們可以看到這裏註冊了幾個解析器,第一個我們知道是xml形式的解析,接下來我們看AspectJAutoProxyBeanDefiniti

post方式發送和解析xml

httpclient post xml public void etcauthorize(String authCode, String clientState) { logger.info("CMCasController- etcauthorize start... "); V

SpirngMVC AOP 用註解方式配置切面IllegalArgumentException: error at ::0 formal unbound in pointcut 異常分析

ppi point exc sig 配方 mea oca 代碼 ger MEAVN代碼 <!-- springAOP核心包 --> <dependency> <groupId>org.springframework<

SSH註解方式XML配置方式對照表

png img XML struts ima hiberna str inf 圖片 一、Hibernate 1、一對多註解 2、單表註解 二、Struts2   Struts2註解 三、Spring 1、IOC註解 2、AOP註解 SSH註解方式與XML配置

spring-bean(註解方式-管理依賴註入)

sca 支持 nbsp 開啟 const tex ng- autowire 作用 Bean管理(註解方式) 1、添加註解的依賴包:Spring-aop.jar 2、配置spring的XML文件的引入(查官方源碼) 3、開啟註解的掃描 <context:compon

Qt中三種解析xml方式

處理異常 AR ttr omd ostream odin move encoding efault 在下面的隨筆中,我會根據xml的結構,給出Qt中解析這個xml的三種方式的代碼。雖然,這個代碼時通過調用Qt的函數實現的,但是,很多開源的C++解析xml的庫,甚至很多其他語

XML —— DOM方式解析XML

1. DOM 方式解析 XML 原理 基於 DOM(Document Object Model,文件物件模型)解析方式,是把整個 XML 文件載入到記憶體,轉化成 DOM 樹,因此應用程式可以隨機的訪問 DOM 樹的任何資料; 優點:靈活性強,速度快; 缺點:消耗資源比較多;

XML —— SAX方式解析XML

1. SAX 方式解析 XML 原理 SAX 的工作原理簡單地說就是對文件進行順序掃描,當掃描到文件(document)開始與結束、元素(element) 開始與結束等地方時通知事件處理函式,由事件處理函式做相應動作,然後繼續同 樣的掃描,直至文件結束。 優點:相對於DOM方式消耗資源比較少,適

Spring自動裝配Bean——xml方式註解方式

自動裝配的概念 在Spring使用中,我們在xml配置檔案通過元素或元素的ref屬性向bean注入另外的依賴bean。 如果使用自動裝配(autowiring) ,就可以減少甚至消除配置元素和元素。 設定元素的autowire屬性就可以設定bean的自動裝配模式。自動裝配有5種模式。

深入CallableRunnable兩個介面 獲取執行緒返回結果

-今天碰到一個需要獲取執行緒返回結果的業務場景,所以瞭解到了Callable介面。 先來看下下面這個例子: public class ThreadTest { public static void main(String[] args) throws Exception {

_044_Android_解析XML的幾種方式的原理與特點:DOM、SAX、PULL

轉自https://blog.csdn.net/tianhouquan/article/details/82467820 ,感謝作者的無私分享。  解析XML的幾種方式的原理與特點:DOM、SAX、PULL。 XML的解析方式有很多,光開源的就有十多種:如Xerces、J

Android 建立與解析XML(五)—— Dom4j方式

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!