原创

Java-WebService

Java 调用webservice https://blog.csdn.net/m0_54355172/article/details/130348073

```
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>3.4.5</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>3.4.5</version>
</dependency>
```
```
package cn.jiangjiesheng.proj.syncMdm.service;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;

/**
* webservice 同步用户信息接口
*/
@WebService(targetNamespace = "http://hnhx.webservice.syncOrg.proj.safety51.com")
public interface SyncMDM2XgfService {

@WebMethod
String testApi();

@WebMethod
String insertOrUpdate(@WebParam(name = "Data") String Data);
}

```

```
package cn.jiangjiesheng.proj.syncMdm.service.impl;

import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import cn.hutool.json.XML;
import com.alibaba.fastjson.JSON;
import com.google.common.base.Preconditions;
import com.google.common.collect.*;
import cn.jiangjiesheng.bootstrap.commons.exception.BizzException;
import cn.jiangjiesheng.proj.syncDeviceSystem.common.XGFConstants;
import cn.jiangjiesheng.proj.syncMdm.pojo.SyncMdmDto;
import cn.jiangjiesheng.proj.syncMdm.pojo.XmlVo;
import cn.jiangjiesheng.proj.syncMdm.service.SyncMDM2XgfService;
import cn.jiangjiesheng.proj.syncMdm.util.ParamFieldLockUtils;
import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.jws.WebService;
import javax.servlet.http.HttpServletRequest;
import java.util.*;
import java.util.stream.Collectors;

@WebService(serviceName = "syncMDM2Xgf",
targetNamespace = "http://hnhx.webservice.syncOrg.proj.safety51.com",
endpointInterface = "cn.jiangjiesheng.proj.syncMdm.service.SyncMDM2XgfService")
@Service
@Slf4j
public class SyncMDM2XgfServiceImpl extends BaseService implements SyncMDM2XgfService {

private final static String UNIQUE_TAG = "uniqueTag";
private final static String TAG = "同步MDM数据到安元";

@Override
public String testApi() {
List<Map<String, Object>> maps = openApiService.testApi(getEntId(), XGFConstants.TABLE_ID_相关方企业信息管理);
return JSON.toJSONString(maps);
}


@Override
public String insertOrUpdate(String xml) {
//业务上同步实际是一条条同步的
List<SyncMdmDto> DataList = readOrgStringXml(xml);
if(CollectionUtils.isEmpty(DataList)){
throw new BizzException("解析出的数据为空");
}
XmlVo xmlVo = doXXXbizzCode(JSON.toJSONString(DataList));
//返回值参考 public String SysOrgSync(String data)
SyncMdmDto syncMdmDto = DataList.get(0);
String xmlResult = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
"<responses>\n";
if (xmlVo.getCode() == 200) {
xmlResult +=
"<response>\n" +
"<DIS_ID>\n" + syncMdmDto.getDIS_ID() +
"</DIS_ID>\n" +
"<REQUEST_ID>\n" + syncMdmDto.getDIS_ID() +
"</REQUEST_ID>\n" +
"<COMMAND>\n" + "ORGUNIT_ADD" +
"</COMMAND>\n" +
"<SYSTEM_TAG>\n" + "HSE" + "</SYSTEM_TAG>\n" +
"<STATUS>\n" + 0 + "</STATUS>\n" +
"<RESULT_CODE>\n" + "0000" + "</RESULT_CODE>\n" +
"<RESULT_MESSAGE>\n" + "同步成功" + "</RESULT_MESSAGE>\n" +
"</responses>\n";
} else {
xmlResult +=
"<response>\n" +
"<DIS_ID>\n" + syncMdmDto.getDIS_ID() +
"</DIS_ID>\n" +
"<REQUEST_ID>\n" + syncMdmDto.getDIS_ID() +
"</REQUEST_ID>\n" +
"<COMMAND>\n" + "ORGUNIT_ADD" +
"</COMMAND>\n" +
"<SYSTEM_TAG>\n" + "HSE" + "</SYSTEM_TAG>\n" +
"<STATUS>\n" + 1 + "</STATUS>\n" +
"<RESULT_CODE>\n" + "" + "</RESULT_CODE>\n" +
"<RESULT_MESSAGE>\n" + "同步失败" + "</RESULT_MESSAGE>\n" +
"</responses>\n";
}

xmlResult += "</response>\n";
return xmlResult;
}

/**
* 参考
* 组织架构部门解析
* List<OrgInfoXML> readOrgStringXml(String xml)
* @param xml
* @return
*/
private static List<SyncMdmDto> readOrgStringXml(String xml) {

log.info("接收到同步承包商人员的xml:{}",xml);
List<SyncMdmDto> list = new ArrayList<>();
Document doc = null;
try {
doc = DocumentHelper.parseText(xml); // 将字符串转为XML
Element rootElt = doc.getRootElement(); // 获取根节点
log.info("根节点:" + rootElt.getName()); // 拿到根节点的名称
// 获取根节点下的子节点ORG
Iterator iter = rootElt.elementIterator("request");
// 遍历head节点
while (iter.hasNext()) {
SyncMdmDto orgInfoXML = new SyncMdmDto();
//需要的字段 见 https://blogqpaas.yuque.com/tffb7u/lqc9hc/zzg85e2mfo2y8xtk?singleDoc#ta9b
Element recordEle = (Element) iter.next();
String CODE = recordEle.elementTextTrim("CODE");
String FULL_NAME = recordEle.elementTextTrim("FULL_NAME");

orgInfoXML.setCODE(CODE);
orgInfoXML.setFULL_NAME(FULL_NAME);

list.add(orgInfoXML);
}
} catch (Exception e) {
throw new BizzException("解析xml出现异常:"+e.getMessage());
}

return list;
}



private List<Map<String, Object>> parseALLDataFromXml(String body) {
JSONArray request = null;
boolean needHandleCase;
if (body.startsWith("[{")) {
request = JSONUtil.parseArray(body);
needHandleCase = true;
} else {
needHandleCase = false;
JSONObject jsonObject = XML.toJSONObject(body);
if (jsonObject == null) {
throw new BizzException("解析xml失败");
}

JSONObject requests = jsonObject.getJSONObject("requests");
request = requests.getJSONArray("request");
}
if (request == null || request.isEmpty()) {
throw new BizzException("解析xml失败,数据为空");
}
List<Map<String, Object>> list = Lists.newArrayList();

request.forEach(oneObj -> {
if (oneObj instanceof JSONObject) {
JSONObject item = (JSONObject) oneObj;

if (needHandleCase) {
JSONObject itemNew = new JSONObject();
//处理完接收webservice的数据首字母变成小写了
for (String key : item.keySet()) {
itemNew.putOnce(key.toUpperCase(), item.get(key));
}
item = itemNew;
}
Map<String, Object> data = Maps.newHashMap();

//供应商编码
//企业编号的的数据库类型的是编码,注意会不会自增。
String CODE = item.getStr("CODE", "");
data.put("qiyebianhao", CODE);


data.put(UNIQUE_TAG, getUniqueTag(data.get("qiyebianhao").toString(),
data.get("qiyemingcheng").toString(),
data.get("tongyishehuixinyongd").toString()));

//手机号插入一个默认的
data.put("shoujihaoma", "18888888888");

list.add(data);
} else {
throw new BizzException("解析xml失败,数据格式存在错误,请联系安元科技公司");
}
});

return list;
}

private String getUniqueTag(String qiyebianhao, String qiyemingcheng, String tongyishehuixinyongd) {


String tag = "";
if (StringUtils.isNotBlank(qiyebianhao)) {
tag += qiyebianhao;
tag += "#";
//后面2个占位 保证唯一
tag += "_";
tag += "#";
tag += "_";
tag += "#";
return tag;
}

if (StringUtils.isBlank(qiyemingcheng) && StringUtils.isBlank(tongyishehuixinyongd)) {
throw new BizzException("解析xml失败,CODE、FULL_NAME、SOCIAL_CREDIT_CODE均已为空值");
}
tag += "_";
tag += "#";
//后面2个占位 保证唯一
tag += qiyemingcheng;
tag += "#";
tag += tongyishehuixinyongd;
tag += "#";
return tag;
}
}


```

另外生产对象生成xml

```

@PostMapping("/insertOrUpdate")
//这里可能需要返回xml
@ResponseBody
@IgnoreResponseWrapper //这个在按原则这边必须有,不然会被底层保证成json
public ResponseEntity<String> insertOrUpdate(@RequestBody String body) {
XmlVo xmlVo = syncMDM2XgfService.doXXXbizzCode(body);

HttpHeaders headers = new HttpHeaders();
headers.add("Pragma", "no-cache");
headers.add("Expires", "0");
headers.add("Last-Modified", new Date().toString());
headers.add("ETag", String.valueOf(System.currentTimeMillis()));

String xml = convertToXML(xmlVo);

return ResponseEntity
.ok()
.headers(headers)
.contentType(MediaType.parseMediaType("application/xml"))
.body(xml);
}

public static <T> String convertToXML(T t) {
try {
JAXBContext jaxbContext = JAXBContext.newInstance(t.getClass());
Marshaller marshaller = null;

marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

StringWriter writer = new StringWriter();
marshaller.marshal(t, writer);
return writer.toString();
} catch (JAXBException e) {
e.printStackTrace();
}
return null;
}
```

正文到此结束
本文目录