Menu

13 Mayıs 2009 Çarşamba

Ornek bir Web Service

Merhaba, bu yazimizda olusturdigumuz bi entity`in beanlerini olusturmak, daha sonra o bean`i web service yapalim.
Yaptigim ornek herhangi bir turde string deger alsin (XML, html vs.), ve geriye yine bir string deger dondursun. bean`imizin iki tane metodu olsun, getConfig ve setConfig. getConfig String tipinde bir parametre, setConfig String tipinde iki tane parametre alsin. Simdi sozu fazla uzatmadan hemen entity ve class`larimizi olusturalim.

Config.java
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class VConfig implements Serializable {
@Id
private String name;
@Column(nullable=true,columnDefinition="CLOB")
private String xmlData;

public VConfig(){
}

public VConfig(String name,String xmlData){
setName(name);
setXmlData(xmlData);
}

public String getXmlData() {
return xmlData;
}

public void setXmlData(String xmlData) {
this.xmlData = xmlData;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}

ConfigWSRemote.java
import javax.ejb.Remote;
@Remote
public interface VConfigWSRemote {
StringWrapper getConfig(String name);
void setConfig(String name, String config);
}

ConfingWS.java
import javax.ejb.Stateless;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.config.entity.VConfig;

@WebService
@Stateless
public class VisaConfingWS implements VConfigWSRemote {
@PersistenceContext
EntityManager em;
@WebMethod(action="getConfig")
public StringWrapper getConfig(String name) {
VConfig vConfig = (VConfig) em.createQuery("SELECT v FROM VConfig v WHERE v.name = :name"). setParameter("name", name).getSingleResult();
return new StringWrapper(vConfig.getXmlData());
}

@WebMethod(action="setConfig")
public void setConfig(String name, String config){
VConfig vConfig = new VConfig(name,config);
try{
em.merge(vConfig);
}catch(IllegalStateException ie){
try{
em.persist(vConfig);
}catch(Exception e){
e.printStackTrace();
}
}catch(Exception e){
e.printStackTrace();
}
}
}

Simdir bir tanede StringWrapper class`i olusturaluim cunku, xml veya bask turde bir veri girildiginde hata vermeye ama, getConfig ile cagrildiginda, xml okunamayacak o yuzden bole bir class olusturalim ve return new StringWrapper(vConfig.getXmlData()); bu satirtdaki gibi donen deger StringWrapper tipinde donsun, bu sekilde yapinca hic bir sorun yasanmayacaktir.

StringWrapper.java
import java.io.Serializable;
public class StringWrapper implements Serializable{
protected String content;

public StringWrapper(){}

public StringWrapper(String content) {
setContent(content);
}

public void setContent(String content) {
this.content = content;
}
public String getContent(){
return this.content;
}
}

Bu sekilde sade bir class.
Artik web servisimiz hazir, tek yapmak gerekn wsdl`ini cagirmak ve kullanmak :)

Not: Web servisimizin metodunun action`i gostermeliyiz, java ile calisirken hic bir sorun yasanmaz, ancak baska bir dilden cagirirken, mesala .NET vs. action`i gostermediginiz surece metodu gormeyecektir.

2 yorum: