67,512
社区成员
发帖
与我相关
我的任务
分享
config.properties:
uri=http://对方ip:8080/my/service/TestService?wsdl
otherAccount=me
otherPassword=123456
2>ClientAuthInterceptor:
import org.apache.cxf.binding.soap.SoapMessage;
import org.apache.cxf.binding.soap.interceptor.AbstractSoapInterceptor;
import org.apache.cxf.headers.Header;
import org.apache.cxf.helpers.DOMUtils;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.phase.Phase;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import javax.xml.namespace.QName;
import java.util.List;
public class ClientAuthInterceptor extends AbstractSoapInterceptor
{
private String userName;
private String password;
public ClientAuthInterceptor()
{
super(Phase.WRITE);
}
public ClientAuthInterceptor(String userName, String password)
{
super(Phase.PREPARE_SEND);
this.userName = userName;
this.password = password;
}
public String getUserName()
{
return userName;
}
public void setUserName(String userName)
{
this.userName = userName;
}
public String getPassword()
{
return password;
}
public void setPassword(String password)
{
this.password = password;
}
public void handleMessage(SoapMessage msg) throws Fault
{
List<Header> headers = msg.getHeaders();
// 创建Document对象
Document doc = DOMUtils.createDocument();
Element ele = doc.createElement("authHeader");
// 配置服务器端Head信息的用户密码
Element eleId = doc.createElement("username");
eleId.setTextContent(userName);
Element elePass = doc.createElement("password");
elePass.setTextContent(password);
ele.appendChild(eleId);
ele.appendChild(elePass);
// 生成的XML文档
/**
* <authHeader>
* <userName>用户名</userName>
* <password>密码</password>
* </authHeader>
*/
headers.add(new Header(new QName(""), ele));
}
}
OpenInterface:
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
public class OpenInterface {
public static final String CONFIG_FILE_NAME = "config";
//自动扫描properties文件名为“config”的文件
ResourceBundle bundle = PropertyResourceBundle.getBundle(CONFIG_FILE_NAME);
//将“config.properties”文件封装到bundle中。
public void getMsg() {
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
Client client = dcf.createClient(bundle.getString("uri"));
//引用bundle获取config中的uri即wsdl的地址。
client.getOutInterceptors().add(new ClientAuthInterceptor(bundle.getString("otherAccount"),
bundle.getString("otherCmpLoginPassword")));
//调用ClientAuthInterceptor,获取到设定的用户名和密码
try {
Object array = client.invoke("sendMsg", "xxx");
//sendMsg为第三方的接口方法,“xxx”为此方法所传入的参数。
int length = java.lang.reflect.Array.getLength(array);
List<Object> list = new ArrayList<Object>();
for (int i = 0; i < length; i++) {
list.add(java.lang.reflect.Array.get(array, i));
}
String str = (length == 0 ? "" : list.get(0).toString());
System.out.print{str};
}
}
JaxbUtil:
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import java.io.StringReader;
import java.io.StringWriter;
/**
* Jaxb2工具类
*/
public class JaxbUtil {
/**
* JavaBean转换成xml
* 默认编码UTF-8
* @param obj
* @param writer
* @return
*/
public static String convertToXml(Object obj) {
return convertToXml(obj, "UTF-8");
}
/**
* JavaBean转换成xml
* @param obj
* @param encoding
* @return
*/
public static String convertToXml(Object obj, String encoding) {
String result = null;
try {
JAXBContext context = JAXBContext.newInstance(obj.getClass());
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.setProperty(Marshaller.JAXB_ENCODING, encoding);
StringWriter writer = new StringWriter();
marshaller.marshal(obj, writer);
result = writer.toString();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* xml转换成JavaBean
* @param xml
* @param c
* @return
*/
@SuppressWarnings("unchecked")
public static <T> T converyToJavaBean(String xml, Class<T> c) {
T t = null;
try {
JAXBContext context = JAXBContext.newInstance(c);
Unmarshaller unmarshaller = context.createUnmarshaller();
t = (T) unmarshaller.unmarshal(new StringReader(xml));
} catch (Exception e) {
e.printStackTrace();
}
return t;
}
}
EnvionmentType:
import javax.xml.bind.annotation.*;
import java.util.List;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name ="DeviceType") //xml的根目录
@XmlType(propOrder ={"combo"}) // 解析xml所有的对象属性
public class EnvionmentType {
@XmlElementWrapper(name = "combos") //此对象属性包含于combos中
@XmlElement(name = "Combo") // 此对象属性在xml中的映射
private List<Combo> combo; //属性combo
public List<Combo> getCombo() {
return combo;
}
public void setCombo(List<Combo> combo) {
this.combo = combo;
}
@Override
public String toString() {
return "DeviceTypeResponse"+combo;
}
}
Combo:
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(propOrder = { "id","text","attr" })
public class Combo {
@XmlElement(name = "id")
private String id; //编号
@XmlElement(name = "text")
private String text; //名称
@XmlElement(name = "attr")
private String attr; //单位
public String getAttr() {
return attr;
}
public void setAttr(String attr) {
this.attr = attr;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
@Override
public String toString() {
return "Combo [id=" + id + ",text=" + text + ",attr=" + attr+"]";
}
}
OpenInterface:
EnvionmentType envionmentType = JaxbUtil.converyToJavaBean(str, EnvionmentType.class);
System.out.println(envionmentType);
OpenInterface:
@Autowired
private EnvionmenttypeService envionmenttypeService;
for (Combo m : envionmentType.getCombo()) {
Combo combo = new Combo();
combo.setId(m.getId());
combo.setText(m.getText());
combo.setAttr(m.getAttr());
envionmenttypeService.save(combo);
}