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.
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.