客户端和服务端使用的axis2 1.5,测试的时候发现字段顺序不一致,wsdl2java生成的本地代码字段顺序也不一致,客户端访问时抛异常unexpected subelement xxx各位这种问题有没有遇到的,怎么解决,多谢
解决方案 »
- linux上验证码显示不出来
- struts中的动态ActionForm中可以用对象当他的属性吗
- 网页地址栏的小图标,有没办法全局设置呢?
- 用ibatis怎么写时间间隔的动态查询
- 2000条数据 大数据量保存的问题
- struts2中关于拦截器的问题???
- 我通过myeclipse生成的xfire web服务,通过myeclipse跟浏览器可以访问,但通过自己写的客户端却不行,急救(急~)
- 哪位兄弟知道Spring开发与项目实践的这类书!!!!!!!!!!!
- 继续郁闷啊。要疯了啊。解决问题继续100分。(tomcat自己的例子)
- 我想问一个js+jspsmartupload上传的问题,大虾来帮我看看吧
- MyEclipse生成web service错误Unable to create JAXBContext
- 求助!用axis开发webservice客户端方法
将PropertyDescriptor[] properties = beanInfo.getPropertyDescriptors()句代码,
后面增加
Arrays.sort(properties, new Comparator<PropertyDescriptor>() {
public int compare(PropertyDescriptor o1, PropertyDescriptor o2) {
return o1.getName().compareTo(o2.getName());
}
});
这样就保证按名称顺序了。
<xs:complexType name="MsgInOutParam">
<xs:sequence>
<xs:element minOccurs="0" name="seqn" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="errMsg" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="sndr" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="dttm" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="errNo" nillable="true" type="xs:int" />
<xs:element minOccurs="0" name="length" nillable="true" type="xs:int" />
<xs:element maxOccurs="unbounded" minOccurs="0" name="msgs" nillable="true" type="ax25:SimpleAngelMessage" />
</xs:sequence>
</xs:complexType>
------------
tomcat上wsdl输入参数部分:
<xs:complexType name="MsgInOutParam">
<xs:sequence>
<xs:element minOccurs="0" name="dttm" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="errMsg" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="errNo" nillable="true" type="xs:int" />
<xs:element minOccurs="0" name="length" nillable="true" type="xs:int" />
<xs:element maxOccurs="unbounded" minOccurs="0" name="msgs" nillable="true" type="ax26:SimpleAngelMessage" />
<xs:element minOccurs="0" name="seqn" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="sndr" nillable="true" type="xs:string" />
</xs:sequence>
</xs:complexType>
---------------------
如果使用was上的wsdl生成本地代码,然后调用tomcat上的服务就会报如下错误:
Sending Data Error: org.apache.axis2.AxisFault: org.apache.axis2.databinding.ADBException: Unexpected subelement errMsg客户端代码如下:
public class WSGetMsgListBasicTester
{
private static String strCheckpoint;
final Logger log = Logger.getLogger(this.getClass()); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
public static void main(String[] args) {
// TODO 实现方法体
WSGetMsgListBasicTester wsTester = new WSGetMsgListBasicTester();
wsTester.log.info("wsTester Test begins.");
wsTester.testHandle("test","test","");
wsTester.log.info("wsTester Test Ends.");
}
public void testHandle(String id, String password, String msgXML)
{
HubMessageServiceStub hubMessageServiceStub = null;
try
{
hubMessageServiceStub = new HubMessageServiceStub("http://172.22.6.80:8080/test/services/hubMessageService.hubMessageServiceHttpSoap12Endpoint");
}
catch(Exception e)
{
log.error(e);
}
hubMessageServiceStub._getServiceClient().getOptions().setSoapVersionURI(org.apache.axiom.soap.SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI);
hubMessageServiceStub._getServiceClient().getOptions().setTimeOutInMilliSeconds(5*60*1000);
GetMsgList getMsgList = new GetMsgList();
HubMessageServiceStub.MsgRequestParam msgRequestParam = new HubMessageServiceStub.MsgRequestParam();
msgRequestParam.setId(id);
msgRequestParam.setPassword(password);
if(strCheckpoint == null)
{
strCheckpoint = sdf.format(new Date());
msgRequestParam.setCheckpoint(strCheckpoint);
}
else
{
msgRequestParam.setCheckpoint(strCheckpoint);
}
getMsgList.setReqParam(msgRequestParam); GetMsgListResponse getMsgListResponse = null;
try
{
getMsgListResponse = hubMessageServiceStub.getMsgList(getMsgList);
}
catch (Exception e)
{
log.info("Sending Data Error:"+" "+e);
}
HubMessageServiceStub.MsgInOutParam msgInOutParam = null;
try
{
msgInOutParam = getMsgListResponse.get_return();
}
catch(Exception ex)
{
log.error(ex);
}
log.info("Begin get msg.--------------");
if(msgInOutParam != null)
{
log.info("ErrNo:" + msgInOutParam.getErrNo());
log.info("ErrMsg:" + msgInOutParam.getErrMsg());
}
}
}
有没有办法让客户端按照字段名称来解析,而不依赖与字段顺序。
或者能不能限制wsdl的字段顺序,不管部署在什么服务器,顺序都一样。
你去这里看看 我google出来的 不过全英文的
好像不太相关啊我自己做过测试,随便写了一个简单的web service也有类似问题:
服务端:
package sky;import sky.model.InOutParam;public class HelloAxis2 {
public InOutParam echo(InOutParam para)
{
System.out.println(">>>>> Service HelloAxis2: ");
System.out.println("name:" + para.getStrName());
System.out.println("password:" + para.getPassword());
System.out.println("time:" + para.getNTime());
return para;
}
}
package sky.model;public class InOutParam {
String strName;
int password;
String nTime;
}
客户端:
package sky;import sky.SkyServiceStub.Echo;
import sky.SkyServiceStub.EchoResponse;
import sky.SkyServiceStub.InOutParam;public class TestHelloAxis2 { public static void main(String[] args) throws Exception
{
SkyServiceStub stub = new SkyServiceStub("http://172.34.12.57:9080/AxisWebServiceServer/services/skyService.skyServiceHttpEndpoint/");
Echo request = new Echo();
InOutParam inParam = new InOutParam();
inParam.setStrName("sky");
inParam.setPassword(1);
inParam.setNTime("time");
request.setPara(inParam);
EchoResponse response;
response = stub.echo(request);
InOutParam outParam = response.get_return();
System.out.println("Response : " + outParam.getNTime());
}
}
我也遇到这样的问题,不知道怎么解决。
如果楼主已经解决了,请告诉我解决办法吧,万分感谢!
邮箱:[email protected]