Web-Service call abbrechen ?

bobymiller

Grünschnabel
Hallo zusammen !

Ich beschäftige mich gerade zum ersten Mal mit dem Thema Web-Service Programmierung unter Java 6.

Meine fragen beziehen sich nur auf die Serverseite des Web-Services.

Wie kann ich einen Methodenaufruf auf der Web-Service Seite unterbrechen?

Hierzu folgende zwei Szenarien:

1.)
Angenommen ich bekomme von einem Client eine 100 MB große Datei per bayte array über den Web-Service geschickt. Jetzt soll die Methode auf der Web-Service Seite aber nur maximal 20 MB zulassen. Die Methode soll also überprüfen ob die Größe überschritten wurde und entsprechend die Übertragung daraufhin abbrechen und eine Fehlermeldung an den Client zurückgeben.

2.)
Der Client schickt an den Web-Service eine Anfrage zur Berechung einer komplexen Formel:
Jetzt möchte ich auf der Web-Service Seite gerne einen TimeOut haben der die Berechnung oder eher den Methodenaufruf abbricht und wieder eine Fehlermeldung an den Client zurück sendet.

Hierbei stellt sich für mich auch die generelle Frage, wie man eine Exception an den Client wieder zurückgeben kann, beziehungsweiße wie wird damit überhaupt umgegangen.

Es wäre für mich sehr hilfreich, wenn mir der eine oder andere ein praktisches Beispiel aufführen könnte.

Hier einmal meine bisherige Web-Service Klasse:

Ein kleines Interface:
Code:
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.ParameterStyle;
import javax.xml.ws.Holder;

@WebService(name = "Test") 
@SOAPBinding(style = SOAPBinding.Style.RPC, use = SOAPBinding.Use.LITERAL, parameterStyle = ParameterStyle.WRAPPED)
public interface IntTestWebService {
    
  
    @WebMethod
    boolean setImagesDatas(@WebParam(mode=WebParam.Mode.IN,name = "imageDatas")byte idatas[ ],
                       @WebParam(mode=WebParam.Mode.OUT,name = "datasErrorResult", targetNamespace = "")Holder<String> errMsg );

  @WebMethod
    boolean calcFormula(@WebParam(mode=WebParam.Mode.IN,name = "formulaValue")double value1,
                       @WebParam(mode=WebParam.Mode.OUT,name = "formulaErrorResult", targetNamespace = "")Holder<String> errMsg );

}

Hier die Impl Klasse für das Interface:

Code:
import javax.jws.WebService;
import javax.xml.ws.Holder;

@WebService(serviceName = "Test", portName = "Test", endpointInterface = "IntTestWebService")
public class ImplTestWebServiceBean { 


 public boolean setImagesDatas(byte[] idatas, Holder<String> errMsg) {

        if (idatas== null) {
          throw new UnsupportedOperationException("Not supported yet.");  
        }

        //max 20 MB
        if (idatas.length >= (1024*1024*20)) {
            
            //Web-Service abbrechen 
             errMsg.value = "Die datei darf max. 20 MG gross sein";
            return false;
        }

          errMsg.value = "Datei ist ok.";
        return true;
 }

    boolean calcFormula(double value1, Holder<String> errMsg) {
         
         // hier soll nun irgendetwas berechnet werden und 
         // wenn es länger als 30 Sekunden dauert, soll diese Methode abgebrochen werden
         
         return true;
     }

}

Ich Danke euch schon einmal im Vorraus
 
Zurück