现在一个客户端是delphi,服务器端是java,想通过webservice实现异构,通过XML传送数据,应该怎么设计这个XML呢?
初步设想通过客户端发送一个XML,里面包含操作类型(Action)如select,update,delete.. ,操作对象,如表名,字段名,然后就是多表之间的对应关系.
在JAVA服务端通过解析得到这些元素,包装成SQL或者HQL操作数据库,并返回对应的信息.现在考虑这个webservice中的request应该如何处理?不知道这种思路有没有问题?

解决方案 »

  1.   

    在服务端提供一个webservice的方法,以字符串作为参数,在客户端把xml组织好后,调用ws的方法就可以了啊。
    服务端接收后解析出来,然后就可以做你想要做的事情
      

  2.   

    是这么做,用XML格式的String作为对象传递.问题是这个XML应该如何设计,以及解析出来后如何去操作数据库.
    比如我客户端要做个查询,大家都知道查询有很多种,带函数的,带字段的,带条件的,等等.每种情况都罗列出来吗?
    我觉得很难
      

  3.   

    <?xml version="1.0" encoding="UTF-8"?>
    <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要尽量简洁
      

  4.   

    那就是构造sql的问题了,简单一点的查询,你可以传一个xml,然后到服务端解析成sql,但是你想做的很通用就比较麻烦了,不同的数据库语法也不一样,多层嵌套查询想用xml表示也比较麻烦,个人觉得组织成这样的xml然后解析不如 在客户端把sql拼出来作为参数传过去
      

  5.   

    饿……不知道你要把表联结传过去做什么。
    如果真的需要传表联结的话,我很怀疑你所谓的WS到底能不能操作数据库。
    因为,如果数据库跟WS在一起的话,感觉用不着把表联结传过去。
    如果需要,那么就是说,WS要连接到你这边或者其他的远程服务器,然后操作完了,在把结果发给你?
    这么做貌似很找抽啊……
    照这样推断,你一开始的程序架构是不是有问题?感觉不合理啊……
    不知道这样理解对不。
      

  6.   

    楼上2个兄弟都说的很对啊,说到点子上来了.通过XML来组织SQL,或者是构造JAVA对象,再操作数据库,不管怎么样,只要是查询稍微复杂就很难办到了.就比如说嵌套查询,或者多表的操作.我试了1张表的不同字段,再加上条件,就很复杂了啊.我的意思也就是6楼兄弟你说的.通过协议好的XML做出相应的数据库操作.然后把数据再封装好传递过去.也是按照一定的协议.
    这是我们研发部设计的架构啊,让我来考虑服务端webservice的接口实现.
    如果这样行不通,还有没有更好的方法.在不更改语言平台的基础上?
      

  7.   

    lz可能还没有真正的理解。无论是什么语言开发web service 都无所谓,只要服务器端写好,然后提供给客户端一个wsdl就可以了至于你说的增删改成,传递对象也好,传递参数ID也罢,那都不问题。传递sql到是没见过。。建议你传递对象。对对象进行增删改查。
      

  8.   

    我就是这不清楚,请求过来的数据怎么转换成java对象
      

  9.   

    通过反序列化吗.解析出来XML如何转换成JAVA中识别的对象?
      

  10.   

    定义好Schema,SOAP规范的实现(java,gsoap等)会自动将其转换为对应平台的对象
    最好用自动代码生成的方式(WSDl--->java)
      

  11.   

    加入我在service里写一个select操作的接口,参数是什么?传过来的XML形式的字符串对象?
    如果是传对象就很好操作了,直接调用DAO进行处理,但是webservice是soap协议,如何去传自定义对象
      

  12.   

    WebService返回的值类型只能是元类型或者String。
    我以前因为某种需要恰好研究过,XML转JAVA对象,不过只是初步的研究……
    这里推荐一个东西,JAXB2。
    JAXB2可以解析XML,根据标记的不同解析成JAVA对象。
    那个很简单,只需要一个类库的支持就可以做。
    LZ可以去搜一下有关的例子。
      

  13.   

    刚搜了一个JAXB2的简单例子
    http://www.javaresearch.org/article/64522.htm
    不知道能不能帮到LZ
      

  14.   

    很感谢.我也正在看JAXB.但是还有很多问题.
    1,对象可以通过XML传递,那如何拿这些对象来操作数据库,也就是实现数据访问.对于用户的请求,怎么去分析
    2,还一个问题是delphi中的对象转换成JAVA后会不会有什么问题不管怎么样.感谢了,分给你了
      

  15.   

    XML转JAVA对象是没问题的,不过我接触的都是转成JAVABEAN,不知道怎么能转成JAVA的内置对象,比如CONNECTION等。
    其实我当初看JAXB2只是不爽WS只能传输元数据,不能传对象。
    关于如何操作数据库的问题,其实只要服务器端得到该得的东西了,就可以了。
    就是说,完全可以把DAO封装到服务器端,然后通过WS,在调用前,把XML转换成参数就行了,最后把结果在送出去。
    这样大概就没问题了。
      

  16.   

    现在我用JAXB转JAVABEAN遇到一个问题,
    只要我的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字段同名了.该怎么解决啊
      

  17.   

    刚才又看了下那个例子,发现他也没写GETTER/SETTER……
    你把你的一个JAVABEAN贴出来看看吧。
    还有转换的代码。
      

  18.   

    我把注释注在getter方法上就可以了. THANKYOU.
      

  19.   


    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类型的.不知道该怎么做?
      

  20.   

    做个FILE的STREAM就行了呗,最多多一步。
    你这个难道是JAXB不是JAXB2?……
    我感觉JAXB2没这么复杂吧……还有,一套的意思是,包含JAVABEAN,转换代码,转换后的XML……
      

  21.   

    其实真的不忍心告诉你,WebService是可以传递对象
    用如果用Java的话,MyEclipse带的XFire可以做到,它有创建WebService server和Webservice client的功能