Axis2客户端调用服务端报org.xml.sax.SAXException

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/LuuvyJune/article/details/81455552

org.xml.sax.SAXException: SimpleDeserializer encountered a child element, which is NOT expected, in something it was trying to deserialize.

这个问题接上一篇 https://blog.csdn.net/LuuvyJune/article/details/81390206

报错原因:

服务端:public UserInfo getUserInfo(String token){

                    //业务处理

                    return userInfo;

               }

这个方法返回的是一个对象,

客户端:String result = (String) call.invoke(object);接收的是一个字符串。

解决办法:(1)UserInfo implements Serializable 序列化

                  (2)getUserInfo(String token)这个方法,返回的时候,将对象转为json或者xml

转为json:

String json = com.alibaba.fastjson.JSON.toJSON(userInfo).toString();

 return json;

或者

JSONObject json = JSONObject.fromObject(obj);//将java对象转换为json对象  
String str = json.toString();//将json对象转换为字符串  

接收端可这样处理:

   JSONObject jsonObject=JSONObject.fromObject(objectStr);
   UserInfo=(UserInfo)JSONObject.toBean(jsonObject, UserInfo.class);

转成XML形式:

import java.io.ByteArrayOutputStream;
import java.io.StringReader;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;

//直接展示的方法
public String getUserInfo(String xml){
		String xmlObj = "";
		try {
			//将获取的xml形式的参数转为java对象
			JAXBContext context = JAXBContext.newInstance(UserInfo.class);//获取上下文对象
			Unmarshaller marchaller = context.createUnmarshaller();
			UserInfo userInfo = (UserInfo) marchaller.unmarshal(new StringReader(xml));
			String token = userInfo.getToken();
			if (null != token && !"".equals(token)) {
				//如果token不为空,从缓存中获取username
				String username = RedisCache.get(token);
				if(null!=username && !"".equals(username)){
					//根据账户查询userid
					User user =  userService.queryUserByLoginName(username);
					userInfo.setUserId(user.getId());
//					userInfo.setToken(token);
					userInfo.setUserName(username);
					//设置当前登录时间
					userInfo.setLoginTime(System.currentTimeMillis());
					//token有效期
					userInfo.setExpireDate(2);
					userInfo.setSuccess("ok");
				}
			}
			//将对象转成xml的形式
			Marshaller marshaller = context.createMarshaller(); // 根据上下文获取marshaller对象
			marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");// 设置编码字符集  
			marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);// 格式化XML输出,有分行和缩进  
			ByteArrayOutputStream baos = new ByteArrayOutputStream();  
			marshaller.marshal(userInfo, baos);  
			xmlObj = new String(baos.toByteArray()); // 生成XML字符串  
		} catch (JAXBException e1) {
			e1.printStackTrace();
		}
		return xmlObj;
//		String json = JSON.toJSON(userInfo).toString();
//		return json;
	 }

userInfo.java需要加上标签:

import java.io.Serializable;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

/**
 * 返回的对象
 * @author 
 *
 */
@XmlRootElement(name="userInfo")  
public class UserInfo implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private Long userId;
	
	private String userName;
	//认证凭证
	private String token;
	
	//当前登录时间
	private long loginTime;
	
	//token过期时间 单位小时
	private Integer expireDate;
	
	//成功标志
	private String success;

	public Long getUserId() {
		return userId;
	}

	@XmlElement
	public void setUserId(Long userId) {
		this.userId= userId;
	}

	public String getUserName() {
		return userName;
	}

	@XmlElement
	public void setUserName(String userName) {
		this.userName = userName;
	}

	public String getToken() {
		return token;
	}

	@XmlElement
	public void setToken(String token) {
		this.token = token;
	}

	public long getLoginTime() {
		return loginTime;
	}

	@XmlElement
	public void setLoginTime(long loginTime) {
		this.loginTime = loginTime;
	}

	public Integer getExpireDate() {
		return expireDate;
	}

	@XmlElement
	public void setExpireDate(Integer expireDate) {
		this.expireDate = expireDate;
	}

	public String getSuccess() {
		return success;
	}

	@XmlElement
	public void setSuccess(String success) {
		this.success = success;
	}
	
}

猜你喜欢

转载自blog.csdn.net/LuuvyJune/article/details/81455552