http://community.csdn.net/Expert/topic/3222/3222118.xml?temp=.9576837

解决方案 »

  1.   

    楼主,你已经走进了误区。这样用Web Service你会很累的。
     直接用jax-rpc方式吧。给定参数和类型用Call去触发。
     我建议你使用Apache的Axis
     它的例子比JWSDP更全面和详细。
     
      

  2.   

    谢谢~ 那有人用过saaj吗?。遇到过我这问题么这么多分 up 有分!
      

  3.   

    如果你硬是要这样手工写,可以直接后面接一个 
    SOAPElement.addAttribute(...
    外面的那个大标签可以用
    SOAPBody.addBodyElement(...Web Service的大多数工具都已经很方便使用的了。不需要这样一砖一瓦的操作。
    你说的情形是典型的RPC的应用场合。
    所以建议不要用上面的方式,这样你以后的扩展和维护都会很麻烦
      

  4.   

    急 你那有Axis 接受和发送的 soap message的例子么,,我只需要收发消息 不用调用方法
    如果可以 请加我qq:28367856我下axis的包了,,好象没找到 发message的demo啊 谢谢~~
      

  5.   

    在Axis的samples/message下面有详细的例子。如果你采用message方式,那么是不需要写xsi:type=xsd:string这些东西了的。
    因为这个xml信息包括数据类型是双方事先约定好了。没必要再声明。
    (如果你硬要手工写进去也可以)
    如果使用RPC方式则需要声明这些以便SDK解析,但声明的方式有更高层的方式
    比如 XMLType.XSD_STRING,之后都是有SDK自动处理了。
      

  6.   

    <?xml version="1.0" encoding="UTF-8" standalone="no" ?> 
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="urn:ICQServer" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <SOAP-ENV:Body>
    <mns:icqRegister xmlns:mns="urn:ICQServer" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
    <params xsi:type="tns:RegistrationObject">
    <password xsi:type="xsd:string">test</password> 
    <email xsi:type="xsd:string">[email protected]</email> 
    <nick xsi:type="xsd:string">test name</nick> 
    <id xsi:type="xsd:string">some_id</id> 
    <ip xsi:type="xsd:string">1.1.1.1</ip> 
    </params>
    </mns:icqRegister>
    </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    那个demo配置好了 可我想要<SOAP-ENV:Body> 可这个输出是<soapenv:Body>
    我的server也能接受到消息了 但我想输出上面的格式 9号公路你以前写过,能不能大概帮我写几句啊,,我们马上就要用了 行么~~ 非常感谢 这对你来说不是很难吧 :) 我也改用Axis 上面的东东写死就行 :p
      

  7.   

    你是第N个提出要用SOAP-ENV了,不明白,
    这个soapEnv就长得那么难看么。如果实在难看你可以不看它好了。
    你在服务端的任何语言的任何SOAP  SDK都认它的。不会出现任何解析问题。
    除非你在服务端用纯手工的方式解析这个SOAP包并且写死了这个标签名必须是SOAP-ENV
    否则你真的没必要动它。
    SOAP的外壳都是由两头的SDK去处理的,你没必要关心它,
    对于你来说只有中间的内容才是你所关心的。
      

  8.   

    哦 如果都能兼容就可以了,,
    兄弟你axis熟的话就帮我把中间重要的那部分写了吧,,:~~~~~~~~~~~~~~~
    我也就能接帖了~~
      

  9.   

    写什么啊,中间部分不需要写啊,就是你自己的的xml信息内容啊。
    直接当成 Element 传过去就万事大吉了。
      

  10.   

    我不能读xml 我是没次通过用户提交 的信息来发出soap,所以都不一样
    不能写在xml文件里,,:)
      

  11.   

    如果你不是现成的xml信息,那么你应该使用RPC方式,
    写一个ValueObject封装这些参数,
    然后传入这个ValueObject即可,就象你平常调用函数一样,
    至于中间的解析过程你不用关心。假如你的这个接口方法叫做
    public String register(RegisterObject ro)
    那么调用方法如下:...
    Call call = (Call) new Service().createCall();
    call.setTargetEndpointAddress(new URL(url));
    //注册对象
    QName ro = new QName(uri, "RegistrationObject");
    call.registerTypeMapping(RegisterObject.class, ro,
    new BeanSerializerFactory(RegisterObject.class, ro),
    new BeanDeserializerFactory(RegisterObject.class, ro));call.setOperationName(new QName(uri, "register"));
    call.addParameter("ro", ro, ParameterMode.IN);
    call.setReturnType(XMLType.XSD_STRING);
    String s = (String) call.invoke(new Object[] { rObject }); //call server其中rObject是你填好数据的RegistrationObject的一个实例。
    处理过程中间它会自己加上xsi:type="xsd:string"一类东东的,你不用管。
      

  12.   

    ok,怎么感觉比saaj复杂啊,还得自己定义RegisterObject这个类么?
      

  13.   

    我们给icq发一个soap 他们给我们返回一个soap
    我们用什么地址发的 他们就把soap发回这个地址,,能不能qq add me啊??