客户端通过http的post或get方式发送xml文件,服务端提供接口(比如(aaa.jsp?xml=xmlpos)怎样接收,解析然后返回一个参数给客户端,用什么技术呀。最好有服务端代码[email protected]
解决方案 »
- SSH时遇到的错误
- struts2和spring2.5集成问题
- java WebService 数组
- 在structs中如何实现下拉框的联级问题
- axis2 Rampart
- eclipse不能建立开发Webservice所用的Dynamic Web Project
- 急问 关于jdeveloper 发布web service的问题 (oc4j)
- JAXB如何解组XML文件
- 在用ibatis的时候,把sql语句写在配置文件里。现在碰到一个问题,就是能不能直接执行一个sql不是写在配置文件里面的,是用其他脚本语言拼
- hibernate 单向多对对的关联遇到的问题(困扰我很久了)
- 为什么分页的时候能从第一页到第二页,在点击下一页的时候就不行了
- Rule Compilation error 问题
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Method;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.log4j.Logger;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;import com.cn.model.BusinessFlow;
import com.cn.model.LinktoneBusiness;
import com.cn.model.LinktoneMR;
import com.cn.readXML.DomParse;
import com.cn.service.BusinessFlowService;
import com.cn.service.OperatorException;
/***
* 掌上灵通的上行接收action
* @author Soft02
*
*/@SuppressWarnings("serial")
public class LinktoneAction extends BaseAction{
private static final Logger logger = Logger
.getLogger(LinktoneAction.class);
//添加上行信息
public ActionForward add(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException{
BusinessFlowService bService = BusinessFlowService.getInstance();
BusinessFlow bFlow = new BusinessFlow();
//接收xml流,解析编码为gbk
request.setCharacterEncoding("GBK");
response.setCharacterEncoding("GBK");
String mString="";
//DomParse读取XML文件
String ip = getIpAddr(request);
logger.debug(ip);
// System.out.println(ip);
try {
bService.addAccess(ip);
} catch (OperatorException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
logger.error(e2.getMessage());
}
bFlow = new DomParse().readXMLLinton(request, response);//解析xml文件
bFlow.setIp(ip);
request.getSession().setAttribute("bFlow", bFlow);
return mapping.findForward("addReal");
}
public ActionForward addReal(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException{
BusinessFlowService bService = BusinessFlowService.getInstance();
BusinessFlow bFlow = (BusinessFlow) request.getSession().getAttribute("bFlow");
bFlow = dealBFlow(bFlow);
// System.out.println(" bFlow.setIp" +bFlow.getIp());
try {
bService.addlintonFlow(bFlow);
response.getWriter().print(0);
} catch (OperatorException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
try {
response.getWriter().write("123456");
} catch (IOException e) {
logger.debug(e.getMessage());
e.printStackTrace();
logger.error(e.getMessage());
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
@SuppressWarnings({ "unused", "finally" })
private BusinessFlow dealBFlow(BusinessFlow bFlow){
String msg = bFlow.getContent();
bFlow.setMsg(msg);
//System.out.println("******************************"+msg);
char[] c = msg.toCharArray();
bFlow.setLongphone(bFlow.getSpcode()+bFlow.getToicp());
try {
if (c.length>4) {
String type =""+ c[msg.length()-4]+c[msg.length()-3];
bFlow.setType(type);
}
if (bFlow.getMobile().length()>16) {
logger.error("手机号码过长: "+bFlow.getMobile());
bFlow.setMobile(bFlow.getMobile().substring(bFlow.getMobile().length()-16, bFlow.getMobile().length()-1));
}
bFlow.setGameid(msg.substring(msg.length()-16, msg.length()-16+3));
} catch (StringIndexOutOfBoundsException e) {
// TODO Auto-generated catch block
logger.error("短息格式错误: "+bFlow.getContent());
logger.error(e.getMessage());
bFlow.setGameid("错误");
bFlow.setSign(12);
bFlow.setType("");
e.printStackTrace();
}finally
{
int value =Integer.valueOf(bFlow.getFeeprice());
bFlow.setValue(value/100);
bFlow.setTerraceName("掌上灵通");
return bFlow;
}
}
public ActionForward addMT(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException{
BusinessFlowService bService = BusinessFlowService.getInstance();
//BusinessFlow bFlow = new BusinessFlow();
request.setCharacterEncoding("GBK");
response.setCharacterEncoding("GBK");
String mString="";
//DomParse读取XML文件
String ip = getIpAddr(request);
Document doc = null;
Element root;
BufferedReader br;
LinktoneBusiness bf =new LinktoneBusiness();
try {
//if (( br = request.getReader()).read()>0) {
doc=new SAXBuilder().build(request.getReader());
root=doc.getRootElement();
PropertyDescriptor[] pd=Introspector.getBeanInfo(LinktoneBusiness.class).getPropertyDescriptors();
for(PropertyDescriptor p:pd){
String fieldName=p.getName();
String fieldValue;
if((fieldValue=root.getChildText(fieldName))!=null){
Method m=p.getWriteMethod();
m.setAccessible(true);
try{
m.invoke(bf, fieldValue);
}catch(Exception e){
e.printStackTrace();
logger.error(e.getMessage());
}
}
}
// }
// System.out.println("mspid##############################"+bf.getMsgid());
try {
bf.setIp(ip);
bService.addlintonFlowMT(bf);
response.getWriter().print(0);
} catch (OperatorException e1) {
// TODO Auto-generated catch block
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (JDOMException e) {
e.printStackTrace();
try {
response.getWriter().write("123456");
} catch (IOException e2) {
e2.printStackTrace();
}
} catch (IntrospectionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
public ActionForward addMR(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException{
BusinessFlowService bService = BusinessFlowService.getInstance();
//BusinessFlow bFlow = new BusinessFlow();
request.setCharacterEncoding("GBK");
response.setCharacterEncoding("GBK");
String mString="";
//DomParse读取XML文件
String ip = getIpAddr(request);
Document doc = null;
Element root;
BufferedReader br;
LinktoneMR bf =new LinktoneMR();
try {
//if (( br = request.getReader()).read()>0) {
doc=new SAXBuilder().build(request.getReader());
root=doc.getRootElement();
PropertyDescriptor[] pd=Introspector.getBeanInfo(LinktoneMR.class).getPropertyDescriptors();
for(PropertyDescriptor p:pd){
String fieldName=p.getName();
String fieldValue;
if((fieldValue=root.getChildText(fieldName))!=null){
Method m=p.getWriteMethod();
m.setAccessible(true);
try{
m.invoke(bf, fieldValue);
//System.out.println(fieldValue);
}catch(Exception e){
e.printStackTrace();
}
}
}
// }
try {
bf.setIp(ip);
bService.addlintonFlowMR(bf);
response.getWriter().print(0);
} catch (OperatorException e1) {
// TODO Auto-generated catch block
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (JDOMException e) {
e.printStackTrace();
try {
response.getWriter().write("123456");
} catch (IOException e2) {
e2.printStackTrace();
}
} catch (IntrospectionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
public String getIpAddr(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
} }
这事一个标准的ajax调用啊.
服务端相当于getParameter取得了一个String,用jdom把这个String build成xml流解析,完了再返回一个xml流给调用方就好了。
<DetailObject><ValueObject hid='344345' ConfName='0' ConfContent='ADSL' ConfCount='32'/>
</DetailObject>
怎样解析