wsdl2java "XXX is referenced but not defined."解决办法
来源:互联网 发布:淘宝企业店铺运营方案 编辑:程序博客网 时间:2024/04/30 09:21
最近又开始研究使用AXIS提供WebService的方法了,按照教程基本实现了Java提供的WebService客户端的调用,而且本WebService的调用参数以及回显参数都为自定义对象angelDosRequest以及angelDosResponse。
服务端配置代码 一个服务接口类ITT_PeTraceWebSvc,一个接口实现类PeTraceWebSvcImp
重点在于deploy.wsdd配置:
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<!-- Services from TestAxisService WSDL service -->
<service name="TTL_PETraceAirportData" provider="java:RPC" style="wrapped" use="literal"> <!-- 服务名称,自己定义 -->
<parameter name="wsdlTargetNamespace" value="http://petrace.com"/> <!-- 将显示在wsdl上的命名空间 ,自己定义-->
<parameter name="wsdlServiceElement" value="TTL_PETraceAirportData"/> <!-- 将显示在wsdl中wsdl:service节点的 name属性, 自己定义-->
<parameter name="schemaQualified" value="http://petrace.com"/> <!-- 自己定义-->
<parameter name="wsdlServicePort" value="PeTraceBiz"/> <!-- 将显示在wsdl中wsdl:port节点的 name属性, 自己定义 -->
<parameter name="className" value="com.travelsky.pe.webservice.impl.TTL_PeTraceWebSvcImpl"/> <!-- 实现类名,要带上包名 -->
<parameter name="wsdlPortType" value="ITTL_PeTraceWebSvc"/> <!-- 接口名 -->
<parameter name="typeMappingVersion" value="1.2"/>
<!-- 下面就是对方法的描述了,要写对方法的名字,返回值类型和参数的名字和类型 -->
<operation name="AirportDataBiz" qname="operNS:AirportDataBiz" xmlns:operNS="http://petrace.com" returnQName="retNS:angelDosResponse" xmlns:retNS="http://petrace.com" returnType="retNS:angelDosResponse" xmlns:rtns="http://www.w3.org/2001/XMLSchema" soapAction="" >
<parameter qname="pns:angelDosRequest" xmlns:pns="http://petrace.com" type="pns:angelDosRequest" xmlns:tns="http://www.w3.org/2001/XMLSchema"/>
</operation>
<parameter name="allowedMethods" value="AirportDataBiz"/> <!-- value里面用空格隔开方法名 -->
<!-- 串行化的关键就在下面这里了,对自定义类型wsResult的描述。。。注意type属性里要带上包名 -->
<typeMapping xmlns:ns="http://petrace.com" qname="ns:angelDosRequest" type="java:com.travelsky.pe.util.AngelDosRequest" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory" encodingStyle="" />
<typeMapping xmlns:ns="http://petrace.com" qname="ns:angelDosResponse" type="java:com.travelsky.pe.util.AngelDosResponse" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory" encodingStyle="" />
</service>
</deployment>
使用如下命令生成server-config.wsdd:
set Axis_Lib=E:/axis-1_4/lib
set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%
set Axis_Servlet=http://localhost:8080/pe-speservice/services/AdminService
%Java_Cmd% org.apache.axis.client.AdminClient -l %Axis_Servlet% E:/opt/deploy.wsdd
客户端测试代码,自己手写的(要把AXIS中除了axis-ant.jar的包都加上):
public static void main(String[] args) {
String targetEndPoint="http://localhost:8080/pe-speservice/services/TTL_PETraceAirportData";
Service service = new Service();
try {
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(targetEndPoint);
call.setOperation("AirportDataBiz" );
AngelDosRequest request=new AngelDosRequest();
request.setMessageFunction("APT_PUT");
AngelDosResponse response=new AngelDosResponse();
try {
QName qn_request = new QName("http://petrace.com","angelDosRequest");
call.registerTypeMapping(AngelDosRequest.class,qn_request,
new BeanSerializerFactory(AngelDosRequest.class, qn_request),
new BeanDeserializerFactory(AngelDosRequest.class, qn_request));
QName qn_response = new QName("http://petrace.com","angelDosResponse");
call.registerTypeMapping(AngelDosResponse.class,qn_response,
new BeanSerializerFactory(AngelDosResponse.class, qn_response),
new BeanDeserializerFactory(AngelDosResponse.class, qn_response));
call.setReturnClass(AngelDosResponse.class);
call.setTargetEndpointAddress(targetEndPoint);
call.setOperation("AirportDataBiz");
response = (AngelDosResponse)call.invoke(new Object[]{request});
System.out.println("result="+response.getResultMsg());
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (ServiceException e) {
e.printStackTrace();
}
}
到这里即可宣告WebService的发布和调用了。
然而,为了实现客户端程序的自动发布,看到了一种方式,即在发布目录的web-inf目录下执行如下代码,
java -Djava.ext.dirs=lib org.apache.axis.wsdl.WSDL2Java http://localhost:8080/pe-speservice/services/TTL_PETraceAirportData?wsdl
可生成相应的客户端代码,
但是在调用时 总提示错误为
java.io.IOException: Type {http://www.w3.org/2001/XMLSchema}angelDosResponse is
referenced but not defined.
at org.apache.axis.wsdl.symbolTable.SymbolTable.checkForUndefined(Symbol
Table.java:665)
at org.apache.axis.wsdl.symbolTable.SymbolTable.add(SymbolTable.java:545
)
at org.apache.axis.wsdl.symbolTable.SymbolTable.populate(SymbolTable.jav
a:518)
at org.apache.axis.wsdl.symbolTable.SymbolTable.populate(SymbolTable.jav
a:495)
at org.apache.axis.wsdl.gen.Parser$WSDLRunnable.run(Parser.java:361)
at java.lang.Thread.run(Thread.java:619)
摸不着头脑,搜了网上相应的信息,发现问题还是出在deploy.wldd,其中红色标记处,开始都写成了rtns、或是tns,其实这种错误在浏览wsdl中可以发现,如下图:
wdsl中xsd的命名空间是xmlns:xsd="http://www.w3.org/2001/XMLSchema",当然报错了。于是将xsd改成当前wsdl的targetNamespace就ok了!!!
正确wsdl如下图:
再次运行java -Djava.ext.dirs=lib org.apache.axis.wsdl.WSDL2Java http://localhost:8080/pe-speservice/services/TTL_PETraceAirportData?wsdl
一切正常,当前目录下生成如下文件:
- wsdl2java "XXX is referenced but not defined."解决办法
- __doPostBack is not defined解决办法
- ExtJS报错"xxx is not defined"
- Target runtime XXX is not defined 解决方法
- UnityException: Tag: xxx is not defined.
- Uncaught ReferenceError:xxx is not defined
- Python2中input出现的name “xxx” is not defined问题原因及解决办法
- dwscripts is not defined 错误解决办法
- Meteor Session is not defined解决办法
- paip.python NameError name 'xxx' is not defined\
- python中input输出“Name 'XXX' is not defined问题
- python提示NameError: name 'xxx' is not defined
- javascript函数报Uncaught ReferenceError: XXX is not defined
- 使用python经常出现NameError: name 'xxx' is not defined
- Target runtime Apache Tomcat XXX is not defined.错误解决方法
- javascript函数报Uncaught ReferenceError: XXX is not defined
- XXX not defined
- 对于console输出:xxx is not defined or is not a function的解析
- 调整Speak和Microphone音量。判断是否静音
- 调试技术: Linux core dump file
- CLRS (Introduction to Algorithms 2nd) reading notes 5
- LINQ之Join
- 正确的命名方法
- wsdl2java "XXX is referenced but not defined."解决办法
- 关于未知
- 记录一次.net项目的破解过程
- LINQ之Order By
- JS/VBS配合Adodb.Stream处理字节数据/输出二进制文件
- FLASH与ASP通信入门教程(七) 其它通讯方式原理浅谈
- TCP/IP协议介绍
- Cisco HSRP 工程实例
- Google Reader高效指南