社区
Java EE
帖子详情
求解答WebService一个基本疑问
yycxx
2006-10-15 04:16:20
最近看WEBSERVICE的资料,可能是太笨了,最基本的问题没弄明白。
WebService可以任何自定义的对象,其它语言可以解析这些自定义的对象吗。
如果可以,那么它是根据SOAP的某些协议来解析的,包括对象中的字段、方法,都可以解析出来吗?
然后客户端语言根据解析出来的对象生成一个新的可以使用的对象吗?如果不是这样,那么客户端语言要怎样才可以取得结果里的数据?
...全文
309
4
打赏
收藏
求解答WebService一个基本疑问
最近看WEBSERVICE的资料,可能是太笨了,最基本的问题没弄明白。 WebService可以任何自定义的对象,其它语言可以解析这些自定义的对象吗。 如果可以,那么它是根据SOAP的某些协议来解析的,包括对象中的字段、方法,都可以解析出来吗? 然后客户端语言根据解析出来的对象生成一个新的可以使用的对象吗?如果不是这样,那么客户端语言要怎样才可以取得结果里的数据?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
tonyzhangcn
2006-10-17
打赏
举报
回复
=====================================
// 这个市客户端调用,实际是就是返回上面的结果对象。你根据这个对象调用其里边的方法就得到你要的信息了。当人这个结果对象还可以更复杂的。比如说包含一个列表等。
// Source File Name: InterfaceCenter.java
package com.boss.crcinterfaces.business;
import com.boss.crcinterfaces.*;
import com.ipbs.util.PropertyManager;
import java.net.URL;
public class InterfaceCenter
{
public InterfaceCenter()
{
}
public Object doService(Object requestDataBean)
{
Object result = null;
CRCBillInterfaceBindStub binding = getBinding();
if(binding == null)
return new GeneralResult(new Integer(-1), "无法连接到接口服务!");
binding.setTimeout(0x493e0);
if(requestDataBean instanceof OpenAccountRequest)
try
{
result = binding.openAccount((OpenAccountRequest)requestDataBean);
}
catch(Exception e)
{
result = new GeneralResult(new Integer(-1), "调用开户接口时产生异常!");
}
else
if(requestDataBean instanceof ManageServiceRequest)
try
{
result = binding.manageService((ManageServiceRequest)requestDataBean);
}
catch(Exception e)
{
result = new GeneralResult(new Integer(-1), "调用管理用户服务接口时产生异常!");
}
else
if(requestDataBean instanceof ChangeServiceRequest)
try
{
result = binding.changeService((ChangeServiceRequest)requestDataBean);
}
catch(Exception e)
{
result = new GeneralResult(new Integer(-1), "调用更换用户服务接口时产生异常!");
}
else
if(requestDataBean instanceof ChangeStatusRequest)
try
{
result = binding.changeStatus((ChangeStatusRequest)requestDataBean);
}
catch(Exception e)
{
result = new GeneralResult(new Integer(-1), "调用修改用户状态接口时产生异常!");
}
else
if(requestDataBean instanceof DestroyAccountRequest)
try
{
result = binding.destroyAccount((DestroyAccountRequest)requestDataBean);
}
catch(Exception e)
{
result = new GeneralResult(new Integer(-1), "调用销户接口时产生异常!");
}
else
if(requestDataBean instanceof ChangePasswordRequest)
try
{
result = binding.changePassword((ChangePasswordRequest)requestDataBean);
}
catch(Exception e)
{
result = new GeneralResult(new Integer(-1), "调用密码重置接口时产生异常!");
}
else
if(requestDataBean instanceof ChangeUsernameRequest)
try
{
result = binding.changeUsername((ChangeUsernameRequest)requestDataBean);
}
catch(Exception e)
{
result = new GeneralResult(new Integer(-1), "调用修改登录名接口时产生异常!");
}
else
if(requestDataBean instanceof QueryAccountInfoRequest)
try
{
result = binding.queryAccountInfo((QueryAccountInfoRequest)requestDataBean);
}
catch(Exception e)
{
result = new QueryAccountInfoResponse(new Integer(-1), "调用查询用户信息接口时产生异常!", null);
}
else
if(requestDataBean instanceof DepositRequest)
try
{
result = binding.deposit((DepositRequest)requestDataBean);
}
catch(Exception e)
{
result = new GeneralResult(new Integer(-1), "调用用户续费接口时产生异常!");
}
else
if(requestDataBean instanceof DiscountRequest)
try
{
result = binding.discount((DiscountRequest)requestDataBean);
}
catch(Exception e)
{
result = new GeneralResult(new Integer(-1), "调用用户折扣更新接口时产生异常!");
}
else
if(requestDataBean instanceof UpdateServiceRequest)
result = new GeneralResult(new Integer(-1), "此服务未实现!");
else
if(requestDataBean instanceof DelAssistServiceRequest)
try
{
result = binding.delAssistService((DelAssistServiceRequest)requestDataBean);
}
catch(Exception e)
{
result = new GeneralResult(new Integer(-1), "调用服务变更历史删除接口时产生异常!");
}
else
if(requestDataBean instanceof ChangeAccountInfoRequest)
try
{
result = binding.changeAccountInfo((ChangeAccountInfoRequest)requestDataBean);
}
catch(Exception e)
{
result = new GeneralResult(new Integer(-1), "调用用户信息变更接口时产生异常!");
}
else
result = new GeneralResult(new Integer(-1), "请求值对象非法!");
return result;
}
private CRCBillInterfaceBindStub getBinding()
{
CRCBillInterfaceBindStub binding = null;
String urlProperty = PropertyManager.getProperty("webserviceurl");
try
{
URL url = new URL(urlProperty);
binding = (CRCBillInterfaceBindStub)(new CRCBInterfaceLocator()).getBillInterfaceServices(url);
}
catch(Exception jre)
{
return null;
}
return binding;
}
//测试用
public static void main(String args[])
{
InterfaceCenter interfaceCenter1 = new InterfaceCenter();
}
}
tonyzhangcn
2006-10-17
打赏
举报
回复
ws在服务段和客户端应该有stub和skelenton的。这个你要先了解一下。在RMI中这个是一个很基本的概念。
实际是你发布ws后,客户端实现可以用你发布的ws的wsdl信息来生成客户端的一些处理类,这里边当然有你返回对象xxxResponse,你客户端生成的类会将soap数据序列化成这个对象的例如:
soap中的结果数据是<resultCode>0</resultCode><resultDescription>OK</resultDescription>话,那么你的xxxResponse对象的实例就含有这两个值了。xxxResponse.getResultCode()就是0,xxxResponse.getResultDescription()就是字符串"OK".
// 下面是我们以前做的一个项目中的一个结果对象是wsdl2java生成的,根本不用手工去动。
// Source File Name: GeneralResult.java
package com.boss.crcinterfaces;
import java.io.Serializable;
import javax.xml.namespace.QName;
import org.apache.axis.description.ElementDesc;
import org.apache.axis.description.TypeDesc;
import org.apache.axis.encoding.Deserializer;
import org.apache.axis.encoding.Serializer;
import org.apache.axis.encoding.ser.BeanDeserializer;
import org.apache.axis.encoding.ser.BeanSerializer;
public class GeneralResult
implements Serializable
{
private Integer result;
private String errorDetail;
private Object __equalsCalc;
private boolean __hashCodeCalc;
private static TypeDesc typeDesc;
static Class class$com$boss$crcinterfaces$GeneralResult; /* synthetic field */
public GeneralResult(Integer result, String msg)
{
__equalsCalc = null;
__hashCodeCalc = false;
this.result = result;
errorDetail = msg;
}
public GeneralResult()
{
__equalsCalc = null;
__hashCodeCalc = false;
}
public Integer getResult()
{
return result;
}
public void setResult(Integer result)
{
this.result = result;
}
public String getErrorDetail()
{
return errorDetail;
}
public void setErrorDetail(String errorDetail)
{
this.errorDetail = errorDetail;
}
public synchronized boolean equals(Object obj)
{
if(!(obj instanceof GeneralResult))
return false;
GeneralResult other = (GeneralResult)obj;
if(obj == null)
return false;
if(this == obj)
return true;
if(__equalsCalc != null)
{
return __equalsCalc == obj;
} else
{
__equalsCalc = obj;
boolean _equals = (result == null && other.getResult() == null || result != null && result.equals(other.getResult())) && (errorDetail == null && other.getErrorDetail() == null || errorDetail != null && errorDetail.equals(other.getErrorDetail()));
__equalsCalc = null;
return _equals;
}
}
public synchronized int hashCode()
{
if(__hashCodeCalc)
return 0;
__hashCodeCalc = true;
int _hashCode = 1;
if(getResult() != null)
_hashCode += getResult().hashCode();
if(getErrorDetail() != null)
_hashCode += getErrorDetail().hashCode();
__hashCodeCalc = false;
return _hashCode;
}
public static TypeDesc getTypeDesc()
{
return typeDesc;
}
public static Serializer getSerializer(String mechType, Class _javaType, QName _xmlType)
{
return new BeanSerializer(_javaType, _xmlType, typeDesc);
}
public static Deserializer getDeserializer(String mechType, Class _javaType, QName _xmlType)
{
return new BeanDeserializer(_javaType, _xmlType, typeDesc);
}
static Class class$(String x0)
{
return Class.forName(x0);
ClassNotFoundException x1;
x1;
throw new NoClassDefFoundError(x1.getMessage());
}
static
{
typeDesc = new TypeDesc(class$com$boss$crcinterfaces$GeneralResult != null ? class$com$boss$crcinterfaces$GeneralResult : (class$com$boss$crcinterfaces$GeneralResult = class$("com.boss.crcinterfaces.GeneralResult")));
typeDesc.setXmlType(new QName("http://crcinterfaces.ort.com", "GeneralResult"));
ElementDesc elemField = new ElementDesc();
elemField.setFieldName("result");
elemField.setXmlName(new QName("", "Result"));
elemField.setXmlType(new QName("http://schemas.xmlsoap.org/soap/encoding/", "int"));
elemField.setMinOccurs(0);
typeDesc.addFieldDesc(elemField);
elemField = new ElementDesc();
elemField.setFieldName("errorDetail");
elemField.setXmlName(new QName("", "ErrorDetail"));
elemField.setXmlType(new QName("http://www.w3.org/2001/XMLSchema", "string"));
elemField.setMinOccurs(0);
typeDesc.addFieldDesc(elemField);
}
}
yycxx
2006-10-16
打赏
举报
回复
谢谢tonyzhangcn(东尼)的回答:
可我还不明白的是:
比如我传回的是一个ResponseObject,里面有一个getResult()的方法,我用客户端语言该怎样读取result的数据呢。。可否随便用一种语言示例一下。。
tonyzhangcn
2006-10-15
打赏
举报
回复
你发布出来的webserverices可以用任何语言实现,也可以用任何语言实现客户端,即去调用WS。webservices解析传递的对象是一些已经些好了得API来完成的,一般的我们的客户端的服务器断只有我们些的一些对象类和处理类(当然如果你想自己实现那也可以,但是需要说明的是已经有很多API了,例如:axis,你根本不要费这个刭儿)。客户端发起的时候你使用的api会将其转换成合适的soap保发送到WS服务端,服务端接收到后仍然有API负责将这些soap中的对象转换成java类对象,以便操作。服务端返回的时候正好和这个相反的。
实际上SOAP就是一段xml片断,你当然可以解析其中的任何信息。
WebService
之CXF入门视频教程
WebService
之CXF视频培训教程,该课程分为四个部分讲解Java cxf技术、包括
Webservice
基本
概念、JAX-WS方式开发
WebService
应用、JAX-RS方式开发WebServiec应用、SpringBoot整合CXF开发
WebService
应用。
Java技术体系
下面就是
一个
粗略的解
答
。 Java程序员 ·高级特性 反射、泛型、注释符、自动装箱和拆箱、枚举类、可变参数、可变返回类型、增强循环、静态导入 ·核心编程 IO、多线程、实体类、集合类、正则表达式、XML和...
【253期门诊集锦】畅谈WCF的扩展之“道”
每期
一个
主题,站在最新最热的技术前沿为你引航! 本期特邀资深.NET技术专家、畅销书作者蒋金楠老师,针对WCF的扩展之“道”的问题给予解
答
,欢迎网友积极提问,与专家一起讨论! 专家博客:...
【一步
一个
脚印】Tomcat+MySQL为自己的APP打造服务器(3-2)Android 和 Service 的交互之POST方式
今天是圣诞节,虽说我本人对这个西方节日没什么感觉,但毕竟还是有很多小年轻人(自认为已然脱离年轻人的航道)挺在意这个节日的,在这里祝大家圣诞快乐吧(要是凑巧你也没什么感觉,那就预祝元旦快乐)!...
SSM之SpringMVC day01
三层架构浏览器发送
一个
请求给后端服务器,后端服务器现在是使用Servlet来接收请求和数据如果所有的处理都交给Servlet来处理的话,所有的东西都耦合在一起,对后期的维护和扩展极为不利将后端服务器Servlet拆分成三...
Java EE
67,513
社区成员
225,879
社区内容
发帖
与我相关
我的任务
Java EE
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
复制链接
扫一扫
分享
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章