Talebin üstbilgisi veya gövde içeriğinden bağımsız olarak her zaman "Tamam" ile yanıt verecek genel bir web hizmeti oluşturmaya çalışıyorum. Bunu Axis2'de RawXMLInOutMessageReceiver
ile yapabilirim, ancak mümkün olan her durumda JAX-WS'yi (tamamen yeniyim) kullanmayı tercih ederim.JAX-WS ile TÜM isteklere yanıt veren genel bir web hizmeti/gönderme yöntemi oluşturabilir miyim?
@WebService
public interface DummyService {
@WebMethod String processMessage(Object obj);
}
ve basit uygulanmaya konmuştur: ben basit SABUN isteği ile vurunca
@WebService(endpointInterface = "com.dummyservice.DummyService")
public class DummyServiceImpl implements DummyService {
@Override
public String processMessage(Object obj) {
return "OK";
}
}
başarıyla javax.xml.ws.Endpoint#publish(...)
ile hizmet yayımlamak, ancak, örneğin Şimdiye kadar basit bir arayüze var
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header/>
<soapenv:Body>
<derp/>
</soapenv:Body>
</soapenv:Envelope>
Bir SoapFault Cannot find dispatch method for {}derp
belirten ile karşılandım.
JAX-WS ile her şeyi ACK yapacak bir genel/dilsiz web hizmeti oluşturmak mümkün mü? Eğer öyleyse, birisi bana doğru yönde işaret edebilir mi? McDowell gelen ucuna
DÜZENLEME sayesinde ben ile bunu başardı bir SOAPHandler
:
public class DummySOAPHandler implements SOAPHandler {
@Override
public boolean handleMessage(MessageContext context) {
return process((SOAPMessageContext) context);
}
@Override
public boolean handleFault(MessageContext context) {
return process((SOAPMessageContext) context);
}
@Override
public void close(MessageContext context) { }
@Override
public Set<QName> getHeaders() {
return null;
}
private boolean process(SOAPMessageContext ctx) {
try {
SOAPMessage message = ctx.getMessage();
SOAPEnvelope envelope = message.getSOAPPart().getEnvelope();
SOAPBody body = message.getSOAPBody();
if ((Boolean) ctx.get (MessageContext.MESSAGE_OUTBOUND_PROPERTY)) {
Iterator<SOAPElement> bodyChildren = body.getChildElements();
while (bodyChildren.hasNext()) {
SOAPElement child = bodyChildren.next();
child.detachNode();
}
body.addBodyElement(envelope.createName("OK"));
message.saveChanges();
}
} catch (SOAPException e) {
e.printStackTrace();
}
return true;
}
}
Bunu yapmak için neden sadece bir Servlet oluşturmuyoruz? WS yığınının, çemberler boyunca zıplamak için harcayacağınız değere getirme değeri nedir? –
Bu, çeşitli SOAP istemcilerini test etmek için kullanılır. Çeşitli üstbilgi öğelerini günlüğe kaydetme ve işleme konusunda yapılacak daha fazla iş var. Sorunu açıklığa kavuşturmak için sorunu çözdüm. –