axis中,发布的服务需要返回2个String,我就傻了。 没看你的代码,从你的描述不就可以返回一个String []解决问题吗,先把那两个String 放在一个数组中 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我希望在返回的时候得到的http消息里面,包含的是两个变量。 返回http+soap邦定在一起的消息里面,要有2个变量客户端如何实现?服务器端呢?wsdd呢? 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编程风格 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的消息变量分别是时间戳和随机数。高人啊,等待高人出现啊。。怎么解决这个问题。 我想得到的是,一次HTTP+SOAP+XML的传输请求,就能够返回两个变量,分别是时间戳和随机数。而这两个变量的返回方式必须是String,也就是说soap返回过来的消息不能使数组或者其他类型。 不行啊,如果直接返回String1+String2,客户端的确可以接受并且substring但这不是我想要得。你想想:如果返回的是String1+String2,那么soap里面会怎么描述?肯定描述的还是一个变量。我要的是返回的时候soap里面描述了2个变量。 以下是我用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,它是一个随机字符串。但是我希望同时在请求的时候也要发送时间戳的请求,返回的时候也得到时间戳。两个变量。各位高手,不知道是否明白了俺的意思。俺是蔡鸟,请多关照! 老大,我现在不管返回的是什么了,只要能在返回的soap里面看到两个变量就行了。能支支招吗? 如果是返回数组,或者返回一个自定义的类。那该如何做?客户端、服务端和server-config如何修改配置?俺是刚刚学这个的,还请大哥们多多帮忙。 楼主是我见过的 信誉值最低的人了看你的描述 数组完全可以public String[] YouFunction(){}字符数组第一个值是变量1 第二个值是变量2 俺的信誉值是因为去年俺偷偷的发布了一些广告而造成的,俺也不想啊。。根据你的方法,那么wsdd和客户端该如何更改呢? yyzh(答题容易分难得) 能否详细一点啊。。 我这没Java环境,有错误自己修正一下public String[] YourFuncion{String[] aa= new String[2];aa[0]="你要的第一个返回值";aa[1]="你要的第二个返回值";return aa;}wsdd不用改,看你的样子是直接把.java修改为.jws发布的,那么你把.wsdd文件删掉不用管它都可以 嗯。谢谢。那么客户端代码要改吗?我不能删除wsdd的,我是通过手工配置的这个文件。那么这个如何修改,是否我需要根据jws生成相关的wsdl文件,然后对他进行注册。 根据你所说的返回数组的方法我刚才测试了,结果如下:<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>不知道该如何实现这样的呢?还请高手指点。 我上面回家时候理解错误楼主的意思了有几种解决办法1.直接使用数组2.将两个string用特殊符号分隔,得到后再分开3.用xml脚本等等....用数组有个问题,在用其他平台调用的时候也许会出错,忘记上次测试是可以还是不可以了。在java下axis作为客户端调用是可用。String[] res = (String[]) call.invoke( new Object[] {"jameszhong"} ); yonghar(ohno) 。现在我是使用的数组的方式。但有一个问题,就是如何自定义<item>的名称为: <TimeStamp>1125499745812</TimeStamp> <Random>OTCuEYjuyn7IfbCIf4FXlGn955tOyf1uw8dZLPHLi2b0PkPU</Random>而不是 <item>1125499745812</item> <item>OTCuEYjuyn7IfbCIf4FXlGn955tOyf1uw8dZLPHLi2b0PkPU</item> 自定义<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;} <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的内容?? <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类型的。大家看看还有没有什么好的方法。 没有"简单的"好办法就算不是WebService环境,你想一个方法返回两个值,也不行吧除非你把这两个值组合成一个结构,然后把这个结构返回。那么返回一个结构的这种情况,在WebService中是比较麻烦的,你需要声明这个结构,为了让所有人都能理解他的含义,你还需要声明命名空间,麻烦着呢,照样让用的人一头雾水。 hehe 给你出个馊主意public String[] YourFuncion{String[] aa= new String[2];aa[0]="嘿,哥们能看中文么?数组第2个值是TimeStamp,第3个值是Random 可千万不要弄错阿";aa[1]="1125502659062";aa[2]="jcT4anwRtwEdYHro4AACFNrB2fQovzNdenhUBmc7Zeiw79S6";return aa;}呵呵,玩笑了---没什么好办法,你就当作一维数组返回好了,你可以在文档中写清楚么,如果连数组第一个值第二个值是干什么的,那么用户也不会知道你的方法GetTimeStamp 是做什么用的 哈哈, yyzh(答题容易分难得) 真是幽默啊。呵呵。好的,谢谢你们的帮助。已经走到这一步就不错了。谢谢你们。 求助 一个需求大家可否给个思路或是做过的能否说说怎样实现比较简单。。 现在oracle developer2000过时了嘛? java.sql.SQLException: No value specified for parameter 1 截取字符串 运行工程所有页面老是出这个问题 tomcat 与 jdk 问题,急等到 log4j配置文件读取不到的问题 关于Hibernate数据库配置问题~! 自定义struts标签问题 招聘全职JAVA的WEB软件工程师(杭州) tomcat5.0.28启动的问题? 求一解决方案:怎么样通过链接把一个参数传递给ACTION?
调用的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编程风格
按照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的消息变量分别是时间戳和随机数。
高人啊,等待高人出现啊。。怎么解决这个问题。
<?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,它是一个随机字符串。但是我希望同时在请求的时候也要发送时间戳的请求,返回的时候也得到时间戳。两个变量。各位高手,不知道是否明白了俺的意思。俺是蔡鸟,请多关照!
public String[] YouFunction()
{
}
字符数组第一个值是变量1 第二个值是变量2
根据你的方法,那么wsdd和客户端该如何更改呢?
public String[] YourFuncion{
String[] aa= new String[2];
aa[0]="你要的第一个返回值";
aa[1]="你要的第二个返回值";return aa;
}
wsdd不用改,看你的样子是直接把.java修改为.jws发布的,那么你把.wsdd文件删掉不用管它都可以
<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>不知道该如何实现这样的呢?还请高手指点。
1.直接使用数组
2.将两个string用特殊符号分隔,得到后再分开
3.用xml脚本
等等....用数组有个问题,在用其他平台调用的时候也许会出错,忘记上次测试是可以还是不可以了。
在java下axis作为客户端调用是可用。
String[] res = (String[]) call.invoke( new Object[] {"jameszhong"} );
<Random>OTCuEYjuyn7IfbCIf4FXlGn955tOyf1uw8dZLPHLi2b0PkPU</Random>
而不是
<item>1125499745812</item>
<item>OTCuEYjuyn7IfbCIf4FXlGn955tOyf1uw8dZLPHLi2b0PkPU</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;
}
<item>1125499745812</item>
<item>OTCuEYjuyn7IfbCIf4FXlGn955tOyf1uw8dZLPHLi2b0PkPU</item>
</GetTimeStampReturn>这里soapenc:arrayType="xsd:string[2]" 定义了数组,而数组是不可以换名字的,不然就解析不了了。
如果你要把名字换了,要用自定义的类型了:o
^_^,超出欧的能力范围。你为什么要用到那么复杂的功能啊?还要指定soap的内容??
<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类型的。大家看看还有没有什么好的方法。
public String[] YourFuncion{
String[] aa= new String[2];
aa[0]="嘿,哥们能看中文么?数组第2个值是TimeStamp,第3个值是Random 可千万不要弄错阿";
aa[1]="1125502659062";
aa[2]="jcT4anwRtwEdYHro4AACFNrB2fQovzNdenhUBmc7Zeiw79S6";
return aa;
}
呵呵,玩笑了---没什么好办法,你就当作一维数组返回好了,你可以在文档中写清楚么,如果连数组第一个值第二个值是干什么的,那么用户也不会知道你的方法GetTimeStamp 是做什么用的