记一次在Eclipse中用Axis生成webservice服务端的过程中出现的问题
问题一、
Unable to find config file. Creating new servlet engine config file: /WEB-INF/server-config.wsdd
找不到这个.wsdd的配置文件,没有自动生成!
原因是使用Eclipse自动生成axis服务端时没有执行的最后一步!如图:
当进行的这一步时,需要接着点击启动服务的按钮,之后Next按钮就会可用,点击Next按钮后就会自动生成这个.wsdd文件!
问题二、
AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.generalException
faultSubcode:
faultString: makeTypeElement() was told to create a type......
这个是在发布服务后点击wsdl链接查看http://127....?wsdl文档时发生的错误,但是访问时不输入?wsdl就是一切正常!
出现这个错误是因为接口方法中的参数是一个复杂类型且这个参数的构造函数中还有复杂类型! eq:
<xs:element name="OrderList" minOccurs="0"> <xs:complexType> <xs:sequence> <xs:element name="Order" type="tns:OrderType" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element>
上面代码中OrderList是接口方法中的参数且是一个复杂类型,Order也是一个复杂类型。
这个问题不影响Axis的服务端与客户端的调用,这个据说是Axis的一个bug,而且好像不是每次都会出现!不知道什么时候出现,也可能与浏览器有关!......
为了正常显示,也可以对此进行修改, 提取出复杂类型,并给OrderList添加type参数。 eg:
<xs:element name="OrderList" minOccurs="0" type="tns:OrderListType"></xs:element> <xs:complexType name="OrderListType"> <xs:sequence> <xs:element name="Order" type="tns:OrderType" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType>
2:)wsdl无法正常显示会影响cxf的一般调用,因cxf的客户端是以wsdl为基础生成的!一般调用方法如下:
Service ss = new Service (wsdlURL, SERVICE_NAME); PortType port = ss.getPort(); port.getInfo();
其中wsdl为重点,wsdl的显示会影响调用。
为了避开这个影响,CXF客户端调用服务端时可以适应另一种方法:eq:
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); factory.setServiceClass(PortType.class); factory.setAddress(studioTaskUrl); port = (PortType)factory.create();
UP.
问题三、
忘记了,想起了再说。