现在一个客户端是delphi,服务器端是java,想通过webservice实现异构,通过XML传送数据,应该怎么设计这个XML呢?
初步设想通过客户端发送一个XML,里面包含操作类型(Action)如select,update,delete.. ,操作对象,如表名,字段名,然后就是多表之间的对应关系.
在JAVA服务端通过解析得到这些元素,包装成SQL或者HQL操作数据库,并返回对应的信息.现在考虑这个webservice中的request应该如何处理?不知道这种思路有没有问题?
初步设想通过客户端发送一个XML,里面包含操作类型(Action)如select,update,delete.. ,操作对象,如表名,字段名,然后就是多表之间的对应关系.
在JAVA服务端通过解析得到这些元素,包装成SQL或者HQL操作数据库,并返回对应的信息.现在考虑这个webservice中的request应该如何处理?不知道这种思路有没有问题?
服务端接收后解析出来,然后就可以做你想要做的事情
比如我客户端要做个查询,大家都知道查询有很多种,带函数的,带字段的,带条件的,等等.每种情况都罗列出来吗?
我觉得很难
<root>
<tab>
<col name="name" type="string"/>
<col name="age" type="number">
</tab>
<rows name="employeeInfo">
<row>
<col>Tom</col>
<col>23</col>
<col>Kate</col>
<col>20</col>
</row>
</rows>
</root>注意:为了减少传送的数据包大少,xml要尽量简洁
如果真的需要传表联结的话,我很怀疑你所谓的WS到底能不能操作数据库。
因为,如果数据库跟WS在一起的话,感觉用不着把表联结传过去。
如果需要,那么就是说,WS要连接到你这边或者其他的远程服务器,然后操作完了,在把结果发给你?
这么做貌似很找抽啊……
照这样推断,你一开始的程序架构是不是有问题?感觉不合理啊……
不知道这样理解对不。
这是我们研发部设计的架构啊,让我来考虑服务端webservice的接口实现.
如果这样行不通,还有没有更好的方法.在不更改语言平台的基础上?
最好用自动代码生成的方式(WSDl--->java)
如果是传对象就很好操作了,直接调用DAO进行处理,但是webservice是soap协议,如何去传自定义对象
我以前因为某种需要恰好研究过,XML转JAVA对象,不过只是初步的研究……
这里推荐一个东西,JAXB2。
JAXB2可以解析XML,根据标记的不同解析成JAVA对象。
那个很简单,只需要一个类库的支持就可以做。
LZ可以去搜一下有关的例子。
http://www.javaresearch.org/article/64522.htm
不知道能不能帮到LZ
1,对象可以通过XML传递,那如何拿这些对象来操作数据库,也就是实现数据访问.对于用户的请求,怎么去分析
2,还一个问题是delphi中的对象转换成JAVA后会不会有什么问题不管怎么样.感谢了,分给你了
其实我当初看JAXB2只是不爽WS只能传输元数据,不能传对象。
关于如何操作数据库的问题,其实只要服务器端得到该得的东西了,就可以了。
就是说,完全可以把DAO封装到服务器端,然后通过WS,在调用前,把XML转换成参数就行了,最后把结果在送出去。
这样大概就没问题了。
只要我的JAVABEN里包含getter/setter方法,就会报一个错误Exception in thread "main" com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions
Class has two properties of the same name "personAge"
this problem is related to the following location:
at public int com.zhang.test.Person.getPersonAge()
at com.zhang.test.Person他说我的getPersonAge()这个方法中返回的personAge字段同名了.该怎么解决啊
你把你的一个JAVABEAN贴出来看看吧。
还有转换的代码。
public class JaxbDemo { public static void main(String[] args) throws JAXBException, IOException {
JAXBContext context = JAXBContext.newInstance(Person.class);
//FileReader fr = new FileReader("person.xml");
Marshaller m = context.createMarshaller();
Person p = new Person("helloworld",23,"aaaa"); //JAVABEAN中包含3个属性
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
m.marshal(p, fw);
通过JAXB2来把构建的Person类的对象转换成XML,但是marshal这个方法没有返回值.转成XML后我想转成String类型的.不知道该怎么做?
你这个难道是JAXB不是JAXB2?……
我感觉JAXB2没这么复杂吧……还有,一套的意思是,包含JAVABEAN,转换代码,转换后的XML……
用如果用Java的话,MyEclipse带的XFire可以做到,它有创建WebService server和Webservice client的功能