关于webservice其实好久之前,就想深入的研究一下的,目前对于这个技术仅仅处于两年前的理解吧。今天突然想好好看看了,所以就打开Eclipse 创建了这么个工程。因为用了Eclipse自带的webservice框架(xfire)所以开发挺快的,。我先创建一个服务器段的工程,下面是服务器端工程的services.xml配置清单:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xfire.codehaus.org/config/1.0">
<service>
<name>HelloWorld</name>
<serviceClass>com.wangyingda.IHelloWorld</serviceClass>
<implementationClass>
com.wangyingda.HelloWorldImp
</implementationClass>
<style>wrapped</style>
<use>literal</use>
<scope>application</scope>
</service>
</beans>
服务器端创建好之后,就是测试你的service是否成功了,把工程发布在tomcat下,通常情况下可能会出现不成功的情况,。出错信息是这样的:
javax.servlet.ServletException: Servlet execution threw an exception
root cause
javax.xml.transform.TransformerFactoryConfigurationError: Provider org.apache.xalan.processor.TransformerFactoryImpl not found javax.xml.transform.TransformerFactory.newInstance(Unknown Source) org.codehaus.xfire.wsdl11.builder.SchemaSerializer.writeXml(SchemaSerializer.java:46) org.codehaus.xfire.wsdl11.builder.SchemaSerializer.marshall(SchemaSerializer.java:35) com.ibm.wsdl.xml.WSDLWriterImpl.printExtensibilityElements(Unknown Source) com.ibm.wsdl.xml.WSDLWriterImpl.printTypes(Unknown Source) com.ibm.wsdl.xml.WSDLWriterImpl.printDefinition(Unknown Source) com.ibm.wsdl.xml.WSDLWriterImpl.writeWSDL(Unknown Source) com.ibm.wsdl.xml.WSDLWriterImpl.writeWSDL(Unknown Source) org.codehaus.xfire.wsdl11.builder.WSDLBuilder.write(WSDLBuilder.java:182) org.codehaus.xfire.wsdl11.builder.WSDLBuilderAdapter.write(WSDLBuilderAdapter.java:40) org.codehaus.xfire.DefaultXFire.generateWSDL(DefaultXFire.java:104) org.codehaus.xfire.transport.http.XFireServletController.generateWSDL(XFireServletController.java:380) org.codehaus.xfire.transport.http.XFireServletController.doService(XFireServletController.java:125) org.codehaus.xfire.transport.http.XFireServlet.doGet(XFireServlet.java:107) javax.servlet.http.HttpServlet.service(HttpServlet.java:689) javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
</beans>
这个问题比较常见,其实我具体也不是很清楚,只是知道是jar不兼容或者是jdk版本什么的,反正不管,下载一个xalan.jar加入运行path里,重新启动tomcat 再次访问:http://localhost:8081/FirstWebService/services/helloworld?wsdl ,如果访问当文档,ok了。至此服务器端成功创建了。
下边说说关于客户端创建:
首先创建一个web工程。然后新建web service client 选定当前web工程。使用WSDL或者URL,使用向导创建。成功后,文件夹里会生成两个文件。HelloWorldClient和HelloWorldPortType。那么如何在测试类中体现他们的使用那,下边就是具体的使用了:
package testpage;
import com.wangyingda.HelloWorldClient;
import com.wangyingda.HelloWorldPortType;
public class Test {
public static void main(String[] args){
HelloWorldClient client = new HelloWorldClient();
//create a default service endpoint
HelloWorldPortType service = client.getHelloWorldHttpPort();
String sh = service.sayHello("王英达");
System.out.println("test client completed"+sh);
}
}
好了,完了,webservice 小小尝试完毕。