eclipse如何编译java项目_app客户端怎么开发

eclipse如何编译java项目_app客户端怎么开发CXF提供了很多client端的调用方法。这里让你快速了解这些选择,帮助你判断使用哪种。参见:http://cxf.apache.org/docs/how-do-i-develop-a-client.html源代码主体使用PacktPub.Apache.CXF.Web.Service.Development.Dec.2009书中的代码。本例中,将5种调用方式集中在一个

CXF提供了很多client端的调用方法。这里让你快速了解这些选择,帮助你判断使用哪种。

 

参见:

http://cxf.apache.org/docs/how-do-i-develop-a-client.html

 

 

源代码主体使用PacktPub.Apache.CXF.Web.Service.Development.Dec.2009书中的代码。本例中,将5种调用方式集中在一个工程中,并使用Maven重组的调用方式。

 

本例下载地址:

 

http://dl.iteye.com/topics/download/c647dae6-de86-3eec-9590-7fcf83e9def4

 

  •   WSDL2Java generated Client
  •   JAX-WS Proxy
  •   JAX-WS Dispatch APIs
  •   JAX-WS Client Proxy
  •   Dynamic Client
    •   Reflection API
    •   Service Model API

 

在这里Dispatch本节内容不做介绍。

 

WSDL2Java generated Client

 

也就是依据wsdl文件生成java客户端,直接调用。查看调用方式,也就是OrderProcessService的getOrderProcessPort方法,获得服务的引用。

 

 

 

 

 

 

 

 

启动服务端

mvn test –Pserver

 

 

在启动服务端时,通过maven-compiler-plugin编译class,通过cxf-codegen-plugin依据src/main/resources/OrderProcess.wsdl生成存根类OrderProcessService

 

 

Xml代码  

  1. <plugins>  
  2.             <plugin>  
  3.                 <artifactId>maven-compiler-plugin</artifactId>  
  4.                 <configuration>  
  5.                     <source>1.5</source>  
  6.                     <target>1.5</target>  
  7.                 </configuration>  
  8.             </plugin>  
  9.             <plugin>  
  10.                 <groupId>org.apache.cxf</groupId>  
  11.                 <artifactId>cxf-codegen-plugin</artifactId>  
  12.                 <version>${cxf.version}</version>  
  13.                 <executions>  
  14.                     <execution>  
  15.                         <id>generate-sources</id>  
  16.                         <phase>generate-sources</phase>  
  17.                         <configuration>  
  18.                             <wsdlOptions>  
  19.                                 <wsdlOption>  
  20.                                     <wsdl>src/main/resources/OrderProcess.wsdl</wsdl>  
  21.                                 </wsdlOption>  
  22.                             </wsdlOptions>  
  23.                         </configuration>  
  24.                         <goals>  
  25.                             <goal>wsdl2java</goal>  
  26.                         </goals>  
  27.                     </execution>  
  28.                 </executions>  
  29.             </plugin>  
  30.         </plugins>  

  

 

 

 

 

 

启动客户端

mvn test -PStubClient

 

 

 

JAX-WS Proxy

 

 

 

和生成存根类的方式相反,proxy是不需要执行wsdl2java的。但是在编译环境中需要接口类和VO类。这里,通过指定WSDL_LOCATION和PORT_NAME,使用Service.create创建service,使用service.getPort获得服务引用。

 

 

Java代码  

  1. package demo.order.client;  
  2.   
  3. import java.net.URL;  
  4. import javax.xml.namespace.QName;  
  5. import javax.xml.ws.Service;  
  6.   
  7. import demo.order.Order;  
  8. import demo.order.OrderProcess;  
  9.   
  10. public class ProxyClient {  
  11.   
  12.     private static final QName SERVICE_NAME = new QName(“http://order.demo/”“OrderProcessService”);  
  13.     private static final QName PORT_NAME = new QName(“http://order.demo/”“OrderProcessPort”);  
  14.   
  15.     private static final String WSDL_LOCATION = “http://localhost:8080/OrderProcess?wsdl”;  
  16.   
  17.     public static void main(String args[]) throws Exception {  
  18.         URL wsdlURL = new URL(WSDL_LOCATION);  
  19.         Service service = Service.create(wsdlURL, SERVICE_NAME);  
  20.         OrderProcess port = service.getPort(PORT_NAME, OrderProcess.class);    
  21.   
  22.         Order order = new Order();  
  23.         order.setCustomerID(“C001”);  
  24.         order.setItemID(“I001”);  
  25.         order.setPrice(100.00);  
  26.         order.setQty(20);  
  27.   
  28.         String result = port.processOrder(order);  
  29.         System.out.println(“The order ID is “ + result);  
  30.           
  31.     }  
  32.       
  33. }  

 

  

 

启动服务端

mvn test –Pserver 

启动客户端

mvn test -PProxyClient

 

 

 Client Proxy

 

 

使用JaxWsProxyFactoryBean 类简化Proxy。

 

Java代码  

  1. package demo.order.client;  
  2.   
  3.   
  4. import demo.order.Order;  
  5. import demo.order.OrderProcess;  
  6. import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;  
  7.   
  8. public class ClientProxyClient {  
  9.   
  10.     public static void main(String args[]) throws Exception {  
  11.         JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();  
  12.         factory.setServiceClass(OrderProcess.class);  
  13.         factory.setAddress(“http://localhost:8080/OrderProcess”);  
  14.         OrderProcess service = (OrderProcess)factory.create();  
  15.   
  16.         Order order = new Order();  
  17.         order.setCustomerID(“C001”);  
  18.         order.setItemID(“I001”);  
  19.         order.setPrice(100.00);  
  20.         order.setQty(20);  
  21.   
  22.         String result = service.processOrder(order);  
  23.         System.out.println(“The order ID is “ + result);  
  24.           
  25.     }  
  26.       
  27. }  

 

 

 

 

启动服务端

mvn test –Pserver

启动客户端

mvn test -PClientProxyClient

 

Dynamic Client 

 

甚至不需要SEI接口类,

Reflection API

 

 

JaxWsDynamicClientFactory.newInstance获得JaxWsDynamicClientFactory实例。通过dcf.createClient获得Client客户端引用。

 

Java代码  

  1. package demo.order.client;  
  2.   
  3. import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;  
  4. import org.apache.cxf.endpoint.Client;  
  5.   
  6. import java.lang.reflect.Method;  
  7.   
  8. public class OrderProcessJaxWsDynamicClient {  
  9.     public OrderProcessJaxWsDynamicClient() {  
  10.     }  
  11.   
  12.     public static void main(String str[]) throws Exception {  
  13.         JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();  
  14.         Client client = dcf.createClient(“http://localhost:8080/OrderProcess?wsdl”);  
  15.                   
  16.         Object order = Thread.currentThread().getContextClassLoader().loadClass(“demo.order.Order”).newInstance();  
  17.         Method m1 = order.getClass().getMethod(“setCustomerID”, String.class);  
  18.         Method m2 = order.getClass().getMethod(“setItemID”, String.class);  
  19.         Method m3 = order.getClass().getMethod(“setQty”, Integer.class);  
  20.         Method m4 = order.getClass().getMethod(“setPrice”, Double.class);  
  21.         m1.invoke(order, “C001”);  
  22.         m2.invoke(order, “I001”);  
  23.         m3.invoke(order, 100);  
  24.         m4.invoke(order, 200.00);  
  25.                   
  26.         Object[] response = client.invoke(“processOrder”, order);  
  27.         System.out.println(“Response is “ + response[0]);  
  28.   
  29.     }  
  30. }  

 

 

 

 

启动服务端

mvn test –Pserver

启动客户端

mvn test -POrderProcessJaxWsDynamicClient

 

 

 

 Service Model API

 

最后,Service Model是CXF内置的获取Service的信息。

 

eclipse如何编译java项目_app客户端怎么开发

 

 

Java代码  

  1. package demo.order.client;  
  2.   
  3. import java.beans.PropertyDescriptor;  
  4. import java.util.List;  
  5.   
  6. import javax.xml.namespace.QName;  
  7.   
  8. import org.apache.cxf.endpoint.Client;  
  9. import org.apache.cxf.endpoint.Endpoint;  
  10. import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;  
  11. import org.apache.cxf.service.model.BindingInfo;  
  12. import org.apache.cxf.service.model.BindingMessageInfo;  
  13. import org.apache.cxf.service.model.BindingOperationInfo;  
  14. import org.apache.cxf.service.model.MessagePartInfo;  
  15. import org.apache.cxf.service.model.ServiceInfo;  
  16.   
  17. public class OrderProcessJaxWsDynClient {  
  18.   
  19.     public OrderProcessJaxWsDynClient() {  
  20.     }  
  21.   
  22.     public static void main(String str[]) throws Exception {  
  23.         JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();  
  24.         Client client = dcf.createClient(“http://localhost:8080/OrderProcess?wsdl”);  
  25.         Endpoint endpoint = client.getEndpoint();  
  26.   
  27.   
  28.         // Make use of CXF service model to introspect the existing WSDL  
  29.         ServiceInfo serviceInfo = endpoint.getService().getServiceInfos().get(0);  
  30.         QName bindingName = new QName(“http://order.demo/”“OrderProcessServiceSoapBinding”);  
  31.         BindingInfo binding = serviceInfo.getBinding(bindingName);  
  32.         QName opName = new QName(“http://order.demo/”“processOrder”);  
  33.         BindingOperationInfo boi = binding.getOperation(opName); // Operation name is processOrder  
  34.         BindingMessageInfo inputMessageInfo = null;  
  35.         if (!boi.isUnwrapped()) {  
  36.             //OrderProcess uses document literal wrapped style.  
  37.             inputMessageInfo = boi.getWrappedOperation().getInput();  
  38.         } else {  
  39.             inputMessageInfo = boi.getUnwrappedOperation().getInput();  
  40.         }  
  41.   
  42.         List<MessagePartInfo> parts = inputMessageInfo.getMessageParts();  
  43.         MessagePartInfo partInfo = parts.get(0); // Input class is Order  
  44.   
  45.         // Get the input class Order  
  46.         Class<?> orderClass = partInfo.getTypeClass();  
  47.         Object orderObject = orderClass.newInstance();  
  48.   
  49.         // Populate the Order bean  
  50.         // Set customer ID, item ID, price and quantity  
  51.         PropertyDescriptor custProperty = new PropertyDescriptor(“customerID”, orderClass);  
  52.         custProperty.getWriteMethod().invoke(orderObject, “C001”);  
  53.         PropertyDescriptor itemProperty = new PropertyDescriptor(“itemID”, orderClass);  
  54.         itemProperty.getWriteMethod().invoke(orderObject, “I001”);  
  55.         PropertyDescriptor priceProperty = new PropertyDescriptor(“price”, orderClass);  
  56.         priceProperty.getWriteMethod().invoke(orderObject, Double.valueOf(100.00));  
  57.         PropertyDescriptor qtyProperty = new PropertyDescriptor(“qty”, orderClass);  
  58.         qtyProperty.getWriteMethod().invoke(orderObject, Integer.valueOf(20));  
  59.   
  60.         // Invoke the processOrder() method and print the result  
  61.         // The response class is String  
  62.         Object[] result = client.invoke(opName, orderObject);  
  63.         System.out.println(“The order ID is “ + result[0]);  
  64.     }  
  65. }  

 

 

 

 

启动服务端

mvn test –Pserver

启动客户端

mvn test -POrderProcessJaxWsDynClient 

今天的文章eclipse如何编译java项目_app客户端怎么开发分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/59131.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注