Bu Sayfayı Paylaş:

Kavram

SOAP - Simple Object Access Protocol (Basit Nesne Erişim Protokolü)

Tanım: Web servisler ile onu çağıran uygulamalar arasında belirli yapıda bilgilerin (sayı, karakter gibi basit tipler yanında, nesne tipleri) iletimi için kullanılan XML temelli protokol

Kavram

WSDL - Web Services Description Language (Web Servis Tanımlama Dili)

Tanım: Web servislerin fonksiyonlarının (fonksiyon adı, gelen ve dönen parametre tiplerinin tanımlanması, nasıl erişileceği vb..) tanımlandığı XML tabanlı dil. Bir uygulamanın, bir web servisini kullanması için o web servisinin tanımlanıdığı wsdl dökümanını okuması ve ona göre çağrıması gerekmektedir

İpucu

AXIS ile SOAP Çağrılarında Gelen ve Giden XML'i Almak

AXIS kullanıyorsanız ve gelen ve giden cevapları ekrana bastırmak veya bir dosyaya yazdırmak istiyorsanız aşağıdaki kodu kullanabilirsiniz:
String requestXML = locator.getCall().getMessageContext().getRequestMessage().getSOAPPartAsString();
System.out.println(requestXML);						
String responseXml = locator.getCall().getResponseMessage().getSOAPPartAsString();
System.out.println(responseXml);
Bu kod web servis çağrısı yaptıktan sonra yazılmalı. locator değişken XXXLocator şeklinde üretilen sınıfınızdır. Önce Locator nesnesi yaratıp servisi o nesneden almanız gerekiyor. Eğer doğrudan Proxy üzerinden web servisi çağırıyorsanız aşağıdaki gibi yapabilirsiniz :
String requestXML = ( (org.apache.axis.client.Stub) proxy.getXXXXPortType())._getCall()
        .getMessageContext().getRequestMessage().getSOAPPartAsString();
System.out.println(requestXML);
String responseXML = ( (org.apache.axis.client.Stub) proxy.getXXXXPortType())._getCall()
        .getMessageContext().getResponseMessage().getSOAPPartAsString();
System.out.println(responseXML);

Yukarıdaki getXXXXPortType() metodu sizin servisinize gere değişik olacaktır.

İpucu

response output Error on request mapping:Unparseable date Hatası

Apache AXIS kütüphanesi ile bir web servisi çağırdığınızda , Date tipinde bir alanı set ediyorsanız servisten aşağıdaki gibi bir hata gelebilir :


response output:Error on request mapping:Unparseable date: '2014-06-16'


Bu hatanın sebebi, sunucun beklediği date formatı ile sizin gönderdiğiniz date formatının farklı olmasıdır. AXIS kütüphanesi Date sınıfı org.apache.axis.encoding.ser paketindeki, aşağıdaki sınıf ile serileştirir :


public class DateSerializer implements SimpleValueSerializer {

private static SimpleDateFormat zulu = new SimpleDateFormat("yyyy-MM-dd");
private static Calendar calendar = Calendar.getInstance();
public void serialize(QName name, Attributes attributes, Object value, SerializationContext context) throws IOException { context.startElement(name, attributes); context.writeString(getValueAsString(value, context)); context.endElement(); }
public String getValueAsString(Object value, SerializationContext context) { StringBuffer buf = new StringBuffer(); synchronized (calendar) { if(value instanceof Calendar) { value = ((Calendar)value).getTime(); } if (calendar.get(Calendar.ERA) == GregorianCalendar.BC) { buf.append("-"); calendar.setTime((Date)value); calendar.set(Calendar.ERA, GregorianCalendar.AD); value = calendar.getTime(); } buf.append(zulu.format((Date)value)); } return buf.toString(); }
public String getMechanismType() { return Constants.AXIS_SAX; }
public Element writeSchema(Class javaType, Types types) throws Exception { return null; } }


DateSerializer içinde görüldüğü gibi tarih yyyy-MM-dd formatına dönüştürülmektedir. Bu formatı değiştirip, sınıfı tekrar derleyip , axis jar'ını güncellerseniz sizin istediğiniz formatta date üretilecek ve yukarıdaki hata oluşmayacaktır.




Bu Sayfayı Paylaş:

İletişim Bilgileri

Takip Et

Her Hakkı Saklıdır. Bu sitede yayınlanan tüm bilgi ve fikirlerin kullanımından fibiler.com sorumlu değildir. Bu sitede üretilmiş , derlenmiş içerikleri, fibiler.com'u kaynak göstermek koşuluyla kendi sitenizde kullanılabilirsiniz. Ancak telif hakkı olan içeriklerin hakları sahiplerine aittir