没看你的代码,从你的描述不就可以返回一个String []解决问题吗,先把那两个String 放在一个数组中

解决方案 »

  1.   

    我希望在返回的时候得到的http消息里面,包含的是两个变量。
      

  2.   

    返回http+soap邦定在一起的消息里面,要有2个变量客户端如何实现?服务器端呢?wsdd呢?
      

  3.   

    client:
    调用的endpoint不变,
    call.setOperationName("GetTimeStamp"); // ===》"GetTimeStamp"); 改成新的方法名"Random1"
    String res = (String) call.invoke( new Object[] {"jameszhong"} );
    //String res = (String) call.invoke( new Object[] {} );//空的数组,因为没有参数server:
    GetTimeStamp 类里头加上新的方法wsdd:
    不变,因为发布的是同一个类,而且你再配置中有<parameter name="allowedMethods" value="*"/>,是对所有的方法都发布服务btw:注意你的java编程风格
      

  4.   

    yonghar(ohno)的方法首先从理论上来讲就无法实现我要的功能,更何况我之前也这么测试过。
    按照yonghar(ohno)的方法,只能是返回Random1的结果:一些随机字符串。
    call.setOperationName("GetTimeStamp")如果改成Random1,似乎没什么意义。
    我尝试过使用两个
    call.setOperationName("GetTimeStamp");
    call.setOperationName("Random1");
    当然结果是以Random1为准了我也尝试过使用两组服务:
    Service  service = new Service();
    Call     call    = (Call) service.createCall();
    call.setTargetEndpointAddress( new java.net.URL(endpoint) );
    ... ...Service  service2 = new Service();
    Call     call2    = (Call) service2.createCall();
    call.setTargetEndpointAddress( new java.net.URL(endpoint) );
    ... ...
    这样的结果是,传输了两次http,里面soap的消息变量分别是时间戳和随机数。
    高人啊,等待高人出现啊。。怎么解决这个问题。
      

  5.   

    我想得到的是,一次HTTP+SOAP+XML的传输请求,就能够返回两个变量,分别是时间戳和随机数。而这两个变量的返回方式必须是String,也就是说soap返回过来的消息不能使数组或者其他类型。
      

  6.   

    不行啊,如果直接返回String1+String2,客户端的确可以接受并且substring但这不是我想要得。你想想:如果返回的是String1+String2,那么soap里面会怎么描述?肯定描述的还是一个变量。我要的是返回的时候soap里面描述了2个变量。
      

  7.   

    以下是我用Random1发送的soap请求内容:
    <?xml version="1.0" encoding="UTF-8"?>
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <soapenv:Body>
        <Random1 xmlns=""/>
      </soapenv:Body>
    </soapenv:Envelope>返回的是:
    <?xml version="1.0" encoding="UTF-8"?>
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <soapenv:Body>
        <Random1Response soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
          <Random1Return xsi:type="xsd:string">tc2Hz9jg724ZP3MR6g0SOdoff85GOaLou5bCdFd9JtNa3iDU</Random1Return>
        </Random1Response>
      </soapenv:Body>
    </soapenv:Envelope>得到了一个RandomReturn,它是一个随机字符串。但是我希望同时在请求的时候也要发送时间戳的请求,返回的时候也得到时间戳。两个变量。各位高手,不知道是否明白了俺的意思。俺是蔡鸟,请多关照!
      

  8.   

    老大,我现在不管返回的是什么了,只要能在返回的soap里面看到两个变量就行了。能支支招吗?
      

  9.   

    如果是返回数组,或者返回一个自定义的类。那该如何做?客户端、服务端和server-config如何修改配置?俺是刚刚学这个的,还请大哥们多多帮忙。
      

  10.   

    楼主是我见过的 信誉值最低的人了看你的描述 数组完全可以
    public String[] YouFunction()
    {
    }
    字符数组第一个值是变量1 第二个值是变量2
      

  11.   

    俺的信誉值是因为去年俺偷偷的发布了一些广告而造成的,俺也不想啊。。
    根据你的方法,那么wsdd和客户端该如何更改呢?
      

  12.   

    yyzh(答题容易分难得) 能否详细一点啊。。
      

  13.   

    我这没Java环境,有错误自己修正一下
    public String[] YourFuncion{
    String[] aa= new String[2];
    aa[0]="你要的第一个返回值";
    aa[1]="你要的第二个返回值";return aa;
    }
    wsdd不用改,看你的样子是直接把.java修改为.jws发布的,那么你把.wsdd文件删掉不用管它都可以
      

  14.   

    嗯。谢谢。那么客户端代码要改吗?我不能删除wsdd的,我是通过手工配置的这个文件。那么这个如何修改,是否我需要根据jws生成相关的wsdl文件,然后对他进行注册。
      

  15.   

    根据你所说的返回数组的方法我刚才测试了,结果如下:<soapenv:Body>
    <GetTimeStampResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
    <GetTimeStampReturn xsi:type="soapenc:Array" soapenc:arrayType="xsd:string[2]" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">        <item>1125499745812</item>
            <item>OTCuEYjuyn7IfbCIf4FXlGn955tOyf1uw8dZLPHLi2b0PkPU</item></GetTimeStampReturn>
    </GetTimeStampResponse>
      </soapenv:Body>得到两个item,分别是时间戳和随即字符串。但我希望这两个item都要有自己的名字,变成如下:
            <TimeStamp>1125499745812</TimeStamp>
            <Random>OTCuEYjuyn7IfbCIf4FXlGn955tOyf1uw8dZLPHLi2b0PkPU</Random>不知道该如何实现这样的呢?还请高手指点。
      

  16.   

    我上面回家时候理解错误楼主的意思了有几种解决办法
    1.直接使用数组
    2.将两个string用特殊符号分隔,得到后再分开
    3.用xml脚本
    等等....用数组有个问题,在用其他平台调用的时候也许会出错,忘记上次测试是可以还是不可以了。
    在java下axis作为客户端调用是可用。
    String[] res = (String[]) call.invoke( new Object[] {"jameszhong"} );
      

  17.   

    yonghar(ohno) 。现在我是使用的数组的方式。但有一个问题,就是如何自定义<item>的名称为:        <TimeStamp>1125499745812</TimeStamp>
            <Random>OTCuEYjuyn7IfbCIf4FXlGn955tOyf1uw8dZLPHLi2b0PkPU</Random>
    而不是
            <item>1125499745812</item>
            <item>OTCuEYjuyn7IfbCIf4FXlGn955tOyf1uw8dZLPHLi2b0PkPU</item>
      

  18.   

    自定义<item>标签比较麻烦,
    笨笨的楼主,就不会变通一下么,不要理会SOAP信息的public String[][] YouFunction{
    String [][] aa=new String[2][2];
    aa[0][0]="TimeStamp";
    aa[0][1]="1125499745812";aa[1][0]="Random";
    aa[1][1]="OTCuEYjuyn7IfbCIf4FXlGn955tOyf1uw8dZLPHLi2b0PkPU";return aa;
    }
      

  19.   

    <GetTimeStampReturn xsi:type="soapenc:Array" soapenc:arrayType="xsd:string[2]" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
            <item>1125499745812</item>
            <item>OTCuEYjuyn7IfbCIf4FXlGn955tOyf1uw8dZLPHLi2b0PkPU</item>
    </GetTimeStampReturn>这里soapenc:arrayType="xsd:string[2]" 定义了数组,而数组是不可以换名字的,不然就解析不了了。
    如果你要把名字换了,要用自定义的类型了:o
    ^_^,超出欧的能力范围。你为什么要用到那么复杂的功能啊?还要指定soap的内容??
      

  20.   

    <GetTimeStampResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
          <GetTimeStampReturn xsi:type="soapenc:Array" soapenc:arrayType="xsd:string[][2]" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
            <item soapenc:arrayType="xsd:string[2]">
              <item>TimeStamp</item>
              <item>1125502659062</item>
            </item>
            <item soapenc:arrayType="xsd:string[2]">
              <item>Random</item>
              <item>jcT4anwRtwEdYHro4AACFNrB2fQovzNdenhUBmc7Zeiw79S6</item>
            </item>
          </GetTimeStampReturn>
        </GetTimeStampResponse>
      </soapenv:Body>这似乎也不是我想样的啊。
    其实俺的想法很简单的,就是返回两个变量出来,让客户端(根本不认识的人)一调用,就知道我给他返回了两个变量。关键是要让他明白是两个变量。其实我现在是在看某个标准,根据这个标准里面的规定,客户端调用GetTimeStamp,服务器端必须返回两个变量,一个是TimeStamp(18字节),一个是Random(48字节),都是String类型的。大家看看还有没有什么好的方法。
      

  21.   

    没有"简单的"好办法就算不是WebService环境,你想一个方法返回两个值,也不行吧除非你把这两个值组合成一个结构,然后把这个结构返回。那么返回一个结构的这种情况,在WebService中是比较麻烦的,你需要声明这个结构,为了让所有人都能理解他的含义,你还需要声明命名空间,麻烦着呢,照样让用的人一头雾水。
      

  22.   

    hehe 给你出个馊主意
    public String[] YourFuncion{
    String[] aa= new String[2];
    aa[0]="嘿,哥们能看中文么?数组第2个值是TimeStamp,第3个值是Random 可千万不要弄错阿";
    aa[1]="1125502659062";
    aa[2]="jcT4anwRtwEdYHro4AACFNrB2fQovzNdenhUBmc7Zeiw79S6";
    return aa;
    }
    呵呵,玩笑了---没什么好办法,你就当作一维数组返回好了,你可以在文档中写清楚么,如果连数组第一个值第二个值是干什么的,那么用户也不会知道你的方法GetTimeStamp 是做什么用的
      

  23.   

    哈哈, yyzh(答题容易分难得) 真是幽默啊。呵呵。好的,谢谢你们的帮助。已经走到这一步就不错了。谢谢你们。