2012-01-27 32 views
5

Tôi đã bắt đầu học Apache CXF với Spring. Trước hết, tôi đã cố tạo một mô hình máy khách/máy chủ đơn giản.Apache CXF + Spring: Tạo một Máy khách Đơn giản

Các server-side là: service.HelloWorld.java

@WebService 
public interface HelloWorld { 
    String sayHi(String text); 
} 

service.HelloWorldImpl.java

@WebService(endpointInterface = "service.HelloWorld") 
public class HelloWorldImpl implements HelloWorld { 
    public String sayHi(String text) { 
    return "Hello, " + text; 
    } 
} 

Client-side là: client.Client.java public class Client {

public static void main(String[] args) { 
      ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"cxf-client-servlet.xml"}); 
      HelloWorld client = (HelloWorld) context.getBean("client"); 
      System.out.println(client.sayHi("Batman")); 
    } 
} 

CXF-client-servlet.xml

<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:jaxws="http://cxf.apache.org/jaxws" 
xsi:schemaLocation=" 
    http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-2.0.xsd 
    http://cxf.apache.org/jaxws 
    http://cxf.apache.org/schema/jaxws.xsd"> 

<bean id="client" class="service.HelloWorld" factory-bean="clientFactory" factory-method="create"/> 

<bean id="clientFactory" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean"> 
    <property name="serviceClass" value="service.HelloWorld"/> 
    <property name="address" value="http://localhost:8080/services/HelloWorld"/> 
</bean> 

Vấn đề là: để làm cho công việc của khách hàng tôi đã có thêm dịch vụ. HelloWorld (gói + giao diện) cho dự án của khách hàng. Tôi đã nghe nói rằng trước khi sử dụng một dịch vụ tôi cần phải tạo ra một sơ khai. Vì vậy, nó gây nhầm lẫn cho tôi. Vì vậy, đó là cách tiếp cận chính xác và thực hành tốt nhất (có thể tốt hơn là sử dụng một số cách tiếp cận hợp đồng đầu tiên hoặc tương tự)? Sau đó, tôi muốn thêm WS-Security, vì vậy tôi cần một nền tảng mạnh mẽ =)

Xin cảm ơn trước.

Trả lời

2

Nếu bạn đang thực hiện phát triển WS mã đầu tiên thì tốt hơn là phân phối giao diện và cung cấp giao diện cho khách hàng. Tôi tin rằng @WebService là không cần thiết (?) Trên giao diện (chỉ thực hiện), vì vậy khách hàng không có phụ thuộc vào chú thích này.

Ngay cả khi bạn đang thực hiện các dịch vụ web mã đầu tiên, bạn vẫn có thể tải xuống tài liệu WSDL được tạo bởi Apache CXF và cung cấp cho khách hàng thay thế. Với cách tiếp cận này (được coi là trưởng thành hơn, chưa kể nó có thể được sử dụng trên các nền tảng khác nhau như .NET), khách hàng phải tạo ra các cuống (sử dụng công cụ như wsdl2java). Quá trình này về cơ bản sẽ tạo ra giao diện khách hàng rất giống nhau một cách tự động.

Đó là một trong những lý do tại sao rất nhiều người thích phát triển hợp đồng đầu tiên - cùng một WSDL được sử dụng để tạo ra các nhánh phía máy khách và triển khai WS phía máy chủ. Điều này giới hạn phạm vi (không tương thích) không tương thích.

+0

Cảm ơn bạn đã trả lời. Dịch vụ phân phối giao diện như thế nào? – Dmitry

+0

Vì vậy, bạn đề nghị không sử dụng JaxWsProxyFactoryBean? – Dmitry

+2

@WebService chú thích là cần thiết - Tôi đã kiểm tra =) – Dmitry

4

Bạn có thể sử dụng một cấu hình mùa xuân đơn giản như thế này cho phía khách hàng -

<jaxws:client id="mywebServiceClient" 
    serviceClass="com.saurzcode.TestService" 
    address="http://saurzcode.com:8088/mockTestService"> 

    <jaxws:binding> 
     <soap:soapBinding version="1.2" mtomEnabled="true" /> 
    </jaxws:binding> 
</jaxws:client> 
<cxf:bus> 
    <cxf:outInterceptors> 
     <bean class="com.saurzcode.ws.caller.SoapHeaderInterceptor" /> 
    </cxf:outInterceptors> 
</cxf:bus> 

Bỏ qua Interceptor nếu bạn không cần nó.

Chi tiết khác trong số này post.

+0

Làm thế nào để tiêm khách hàng này vào một bean? –

+0

@MarcinErbel Bạn có thể xây dựng chính xác những gì bạn đang tìm kiếm không? – schhajed

+0

Ok tôi chỉ gặp sự cố trong kho lưu trữ mvn của mình. Tôi nghĩ rằng tiêm khách hàng bên trong đậu phức tạp hơn nhiều. Nvm, nhưng cảm ơn cho một câu trả lời. –

Các vấn đề liên quan