apache cxf מאפשרות לנו בקלות להגדיר web service באמצעות pojo objects
שלב א הגדרת ה Contract package learn.cfx.ws ; import javax.jws.WebService; @WebService public interface IUserDataRepository { @WebMethod void SetUserData ( UserData pUserData); @WebMethod UserData GetUserDataByID ( int pID); }
שימוש ב @WebService על מנת לציין שה interface מגדיר service endpoint interface או contract בלשון wcf
הattribute של @WebMethod מאפשר לעשות קסטומיזציה על הגדרת ה methods של ה interface כגון שם הmethod ב wsdl וכד
שלב ב הגדרת ה payload של UserData package learn.cfx.ws; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement(name = "UserData") public class UserData { private String mName; private String mID; public UserData() { } public int getID() { return mID; } public void setID(int pID) { this.mID = pID; } public int getName() { return mName; } public void setID(int pName { this.mName = pName; } }
שימוש בספריית Java Architecture for XML Binding
(JAXB)
האנוטציה @XmlRootElement מגדירה את ה root של ה xml המתאר את userdata
ניתן לבצע קסטומיזציה של כל אחד מה properties באמצעות @XmlElement
שלב ג הגדרת ה Service
package learn.cfx.ws ; import javax.jws.WebService; @WebService public class UserDataRepositoryImpl implements IUserDataRepository { public UserDataRepositoryImpl(){ } public void SetUserData ( UserData pUserData){ //do nothing } @WebMethod UserData GetUserDataByID ( int pID){ UserData RetValue = new UserData(); RetValue.setName ("Shaaf Peer"); RetValue.setID (2); return RetValue; } }
שלב ד הגדרת ה Binding באמצעות spring
<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.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"> <import resource="classpath:META-INF/cxf/cxf.xml" /> <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" /> <import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> <jaxws:endpoint id="UserDataRepository" implementor="learn.cfx.ws.UserDataRepositoryImpl" address="/UserDataRepository" /> </beans>
אני בדרך כלל חובב maven על פני ant לכן יש להוריד את ה pom המתאים מהמרשתת על מנת לקבל pom עם מספר הגירסה המעודכן ביותר של cxf