java的webservice服务(采用CXF),修改返回值,可解决SOAP不同版本引起的问题,以及要求特殊的xml返回值问题 您所在的位置:网站首页 webservice返回值解析 java的webservice服务(采用CXF),修改返回值,可解决SOAP不同版本引起的问题,以及要求特殊的xml返回值问题

java的webservice服务(采用CXF),修改返回值,可解决SOAP不同版本引起的问题,以及要求特殊的xml返回值问题

2023-09-01 04:46| 来源: 网络整理| 查看: 265

在接受soap消息的时候,可能需要对消息做预处理!可以使用拦截器实现这一目的!  cxf有2种拦截器,InInterceptor、OutInterceptor,顾名思义,InInterceptor可以处理soap请求消息,OutInterceptor可以处理soap响应消息。  所有的拦截器都继承自AbstractPhaseInterceptor,此抽象拦截器实现了Interceptor接口!  可以通过注解和配置文件2种方式来启用自定义的拦截器。   

首先要配置在application-webservice.xml:

webservice服务 import com.skytech.project.SSO.model.UserType; import com.skytech.project.SSO.service.ISSOService; import org.springframework.stereotype.Component; import javax.annotation.Resource; import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebResult; import javax.jws.WebService; @Component @WebService(serviceName = "SyncWebService", targetNamespace = "http://www.sgcc.com/isc/service/") public class SyncWebService implements ISyncWebService { @Resource(name = "SSOService") private ISSOService SSOService; @WebMethod(operationName = "syncUser") public @WebResult(name="isc") ResultXML syncUser(@WebParam(name = "UserList") UserType userInfo) {   //自己的业务处理逻辑,返回ResultXML 可以是字符串,在OutInterceptor可以进行处理。成你想要的格式 return SSOService.syncUser(userInfo); } }

 

UserType的实体: import javax.xml.bind.annotation.*; import java.util.*; @XmlRootElement(name = "UserType") @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "UserType",propOrder = {"USER_ID","LOGIN_NAME","REAL_NAME","USER_STATUS","BIZORG_ID","GENDER","IDENTITY_NO", "BIRTHDAY","MOBILE","OFFICE_PHONE","EMAIL","EMPLOY_NO","POSITION_CODE","POSITION_NAME","JOB","DUTY","DEGREE_CODE", "COMMENTS","UPDATE_DATE","IS_DELETED","EXTENDS"}) public class UserType { // 用户ID private String USER_ID; // 用户登录名 private String LOGIN_NAME; // 姓名 private String REAL_NAME; // 用户状态 private String USER_STATUS; // 所属部门的ID private String BIZORG_ID; // 性别 private String GENDER; // 身份证号 private String IDENTITY_NO; // 生日 private String BIRTHDAY; // 手机 private String MOBILE; // 办公座机 private String OFFICE_PHONE; // 用户邮件 private String EMAIL; // 工号 private String EMPLOY_NO; // 岗位编码 private String POSITION_CODE; // 岗位名称 private String POSITION_NAME; // 职称 private String JOB; // 职务 private String DUTY; // 文化程度 private String DEGREE_CODE; // 备注 private String COMMENTS; // 最后更新时间 private String UPDATE_DATE; // 是否已删除 private String IS_DELETED; // 扩展信息 private HashSet EXTENDS; public String getUSER_ID() { return USER_ID; } public void setUSER_ID(String USER_ID) { this.USER_ID = USER_ID; } public String getLOGIN_NAME() { return LOGIN_NAME; } public void setLOGIN_NAME(String LOGIN_NAME) { this.LOGIN_NAME = LOGIN_NAME; } public String getREAL_NAME() { return REAL_NAME; } public void setREAL_NAME(String REAL_NAME) { this.REAL_NAME = REAL_NAME; } public String getUSER_STATUS() { return USER_STATUS; } public void setUSER_STATUS(String USER_STATUS) { this.USER_STATUS = USER_STATUS; } public String getBIZORG_ID() { return BIZORG_ID; } public void setBIZORG_ID(String BIZORG_ID) { this.BIZORG_ID = BIZORG_ID; } public String getGENDER() { return GENDER; } public void setGENDER(String GENDER) { this.GENDER = GENDER; } public String getIDENTITY_NO() { return IDENTITY_NO; } public void setIDENTITY_NO(String IDENTITY_NO) { this.IDENTITY_NO = IDENTITY_NO; } public String getBIRTHDAY() { return BIRTHDAY; } public void setBIRTHDAY(String BIRTHDAY) { this.BIRTHDAY = BIRTHDAY; } public String getMOBILE() { return MOBILE; } public void setMOBILE(String MOBILE) { this.MOBILE = MOBILE; } public String getOFFICE_PHONE() { return OFFICE_PHONE; } public void setOFFICE_PHONE(String OFFICE_PHONE) { this.OFFICE_PHONE = OFFICE_PHONE; } public String getEMAIL() { return EMAIL; } public void setEMAIL(String EMAIL) { this.EMAIL = EMAIL; } public String getEMPLOY_NO() { return EMPLOY_NO; } public void setEMPLOY_NO(String EMPLOY_NO) { this.EMPLOY_NO = EMPLOY_NO; } public String getPOSITION_CODE() { return POSITION_CODE; } public void setPOSITION_CODE(String POSITION_CODE) { this.POSITION_CODE = POSITION_CODE; } public String getPOSITION_NAME() { return POSITION_NAME; } public void setPOSITION_NAME(String POSITION_NAME) { this.POSITION_NAME = POSITION_NAME; } public String getJOB() { return JOB; } public void setJOB(String JOB) { this.JOB = JOB; } public String getDUTY() { return DUTY; } public void setDUTY(String DUTY) { this.DUTY = DUTY; } public String getDEGREE_CODE() { return DEGREE_CODE; } public void setDEGREE_CODE(String DEGREE_CODE) { this.DEGREE_CODE = DEGREE_CODE; } public String getCOMMENTS() { return COMMENTS; } public void setCOMMENTS(String COMMENTS) { this.COMMENTS = COMMENTS; } public String getUPDATE_DATE() { return UPDATE_DATE; } public void setUPDATE_DATE(String UPDATE_DATE) { this.UPDATE_DATE = UPDATE_DATE; } public String getIS_DELETED() { return IS_DELETED; } public void setIS_DELETED(String IS_DELETED) { this.IS_DELETED = IS_DELETED; } public HashSet getEXTENDS() { return EXTENDS; } public void setEXTENDS(HashSet EXTENDS) { this.EXTENDS = EXTENDS; } }

 

OutInterceptor处理返回值:

 

import com.skytech.basic.core.util.DateUtil; import com.skytech.basic.wrapper.ResultJO; import org.apache.cxf.helpers.IOUtils; import org.apache.cxf.io.CachedOutputStream; import org.apache.cxf.message.Message; import org.apache.cxf.phase.AbstractPhaseInterceptor; import org.apache.cxf.phase.Phase; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Date; public class MyOutterceptor extends AbstractPhaseInterceptor { private static String INIT_SYSTEM_RESPONSE_SUCCESS = "0"; public MyOutterceptor() { //流关闭之前 处理 super(Phase.PRE_STREAM); } public MyOutterceptor(String phase) { super(phase); } public void handleMessage(Message message) { try { OutputStream os = message.getContent(OutputStream.class); CachedStream cs = new CachedStream(); message.setContent(OutputStream.class, cs); message.getInterceptorChain().doIntercept(message); CachedOutputStream csnew = (CachedOutputStream) message.getContent(OutputStream.class); InputStream in = csnew.getInputStream(); String xml = IOUtils.toString(in); StringBuffer stringBuffer = new StringBuffer(); stringBuffer.append(""); if (xml != null && xml.contains(INIT_SYSTEM_RESPONSE_SUCCESS)) { // 成功 stringBuffer.append(" \n" + "0\n" + "" ); stringBuffer.append(DateUtil.time2Str(new Date()) + ":000"); stringBuffer.append(" \n"); stringBuffer.append("success \n" + ""); } else { // 失败 stringBuffer.append(" \n" + "1\n" + "" ); stringBuffer.append(DateUtil.time2Str(new Date()) + ":000"); stringBuffer.append(" \n"); stringBuffer.append("fail \n" + ""); } //这里对xml做处理,处理完后同理,写回流中 IOUtils.copy(new ByteArrayInputStream(stringBuffer.toString().getBytes()), os); cs.close(); os.flush(); message.setContent(OutputStream.class, os); } catch (Exception e) { System.out.println("#####################组织架构同步返回值类型转换错误" ); e.printStackTrace(); } } private class CachedStream extends CachedOutputStream { public CachedStream() { super(); } protected void doFlush() throws IOException { currentStream.flush(); } protected void doClose() throws IOException { } protected void onWrite() throws IOException { } } } 处理后的返回值为 :

 

SOAP不同版本:也可直接修改成符合格式的返回值

 

参照来源:

https://www.iteye.com/blog/empirel-1620128

https://blog.csdn.net/zhan107876/article/details/103199960



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有