开发者社区> 问答> 正文

webservice 的一些问题,我虽写了一些,还是混沌不清:报错

服务器端代码:


先定义一个接口 和实现类,定义一个实体


public class CallCenterCDR implements Serializable {	
    private String policyNo;	
    private String CarID;
    private String PolicyHolderID;	
    private String PolicyHolderName; 
    private String InsuredID;
    private Date UWDate;
字段比较多.
    ..........
    set/get方法




@WebService  //
public interface ForCallCenterCDResponseDto {
	public String Res(@WebParam(name = "policyNo") String policyNo,
			@WebParam(name = "CarID") String CarID,
			@WebParam(name = "InsuredID") String InsuredID

	);
}



@Component//自动把这个类交给spring工厂,生成id="类名小写"的 bean   这样认为对不对?
@WebService
public class ForCallCenterCDResponseDtoImpl implements
		ForCallCenterCDResponseDto {

	@Override
	public String Res(String policyNo, String CarID, String InsuredID) {
		StringBuilder result=new StringBuilder();
		if(policyNo==null||policyNo.equalsIgnoreCase("null")||policyNo.equalsIgnoreCase("")){
			result.append("policyNo不能为空");	
		}else{
			/*
			 * 从数据库中获取数据,这里用一个测试类代替
			 */
			TestData testData=new TestData();
                        CallCenterCDR ccc=testData.test();
			//获得一个有数据的实体
			
			/**
			 * 转换成Json
			 */
			/*String jsonCCC=GsonUtil.transformJson(ccc);
			result.append(jsonCCC);*/
			
		}
		return result.toString();
	}

}

配置web.xml    spring.xml 

部署项目到weblogic  启动服务器,浏览器可以访问的到!

无论是用myeclipse 或者使用CXF 服务器生成的客户端代码都没有 CallCenterCDR.java这个文件

客户端得到的是一个Json的字符串,必须转换成对象的类型才能用 但是客户端没有这个实体..(这里我一直很困惑) 实际 服务端和客户端又不在一起

客户端接口,实现类


@webservice //也有人说这个注释也是必须的  我也没加   求解释
public interface ForCallCenterCDRequestDto {
	public String Req(String policyNo, String CarID, String InsuredID

	);
}



public class ForCallCenterCDRequestDtoImpl implements ForCallCenterCDRequestDto {

	@Override
	public String Req(String policyNo, String CarID, String InsuredID) {
		ForCallCenterCDResponseDtoImplService service = new ForCallCenterCDResponseDtoImplService();
		ForCallCenterCDResponseDto portType = service.getForCallCenterCDResponseDtoImplPort();
		String result=portType.res(policyNo,CarID,InsuredID);
		return result;
	}

}



测试类:



public class Test {
	public static void main(String[] args) {
		ForCallCenterCDRequestDtoImpl test=new ForCallCenterCDRequestDtoImpl();
		String json=test.Req("1", "2", "3");
		java.lang.reflect.Type type = new TypeToken<CallCenterCDR>(){}.getType();
		/**
		 * 由于从json转换成实体,需要知道实体的类型CallCenterCDR,生成的客户端没有实体.....这样直接调用客户端的实体  不恰当吧
		 */
		CallCenterCDR c=new Gson().fromJson(json, type);
		System.out.println(c.getAreaCity()+"***"+c.getPolicyHolderID()+"***"+c.getPayInfo()+"***"+c.getUWDate());
	}

}




展开
收起
kun坤 2020-06-14 16:11:58 618 0
1 条回答
写回答
取消 提交回答
  • 客户端也建一个类就可以了######仅仅是个Demo 离实际开发还真不一样...

    2020-06-14 16:12:07
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
典型业务逻辑漏洞挖掘 立即下载
阿里云总监课第五期第二节:可靠性探索–利用混沌工程理念提高工程可靠性 立即下载
研发过程中的那些反模式 立即下载

相关实验场景

更多