Как проверить, доступен ли веб-сервис? - PullRequest
0 голосов
/ 10 августа 2011

Как я могу проверить, доступен ли какой-либо веб-сервис?
Я могу видеть список служб, также я знаю имена методов, присутствующие в веб-службе. Но я не знаю, какие параметры принимает метод.
Вот метод, представленный в веб-сервисе

 public OMElement getChildren(OMElement paramOMElement)
  {
     Object localObject2 = paramOMElement.toString();
     // Some other stuff 
  }

Я пробовал что-то вроде http://machine_name/war_name/services/service_name/getChildren?a и получил следующую ошибку

soapenv:Fault>
<faultcode>soapenv:Client</faultcode>
−
<faultstring>
Umarshaller error: Error during unmarshall <getChildren><a></a></getChildren>; nested exception is: 
    edu.harvard.i2b2.common.exception.I2B2Exception: Umarshaller error: Error during unmarshall <getChildren><a></a></getChildren>; nested exception is: 
    org.apache.axis2.AxisFault: Umarshaller error: Error during unmarshall <getChildren><a></a></getChildren>; nested exception is: 
    edu.harvard.i2b2.common.exception.I2B2Exception: Umarshaller error: Error during unmarshall <getChildren><a></a></getChildren>
</faultstring>
<detail/>
</soapenv:Fault>   

Означает ли эта ошибка, что я могу получить доступ к службе, но отправляю неверные аргументы?
Также у сервиса нет WSDL-файла.
Как я могу проверить, доступна ли услуга или как узнать точные параметры, которые требуются?

1 Ответ

3 голосов
/ 10 августа 2011

Ну, вам нужно отправить запрос в службу и посмотреть, есть ли ответ, и нет ли исключения, и, таким образом, убедитесь, что сервер работает .. Не удобно с кодированием в Java, но вот выдержка из c #:

function bool CheckIfServiceIsAlive(string url)
{
var isServiceUrlAlive= false;
            var req = WebRequest.Create(url);
            if (!string.IsNullOrEmpty(proxyServer))
            {
                var proxy = new WebProxy(proxyServer, 8080) { Credentials = req.Credentials };  //if you need to use a proxy
                WebRequest.DefaultWebProxy = proxy;
                req.Proxy = proxy;
            }
            else
            {
                req.Proxy =  new WebProxy();
            }
            try
            {
                var response = (HttpWebResponse)req.GetResponse();
                isServiceUrlAlive= true;
            }
            catch (WebException) { }

            return isServiceUrlAlive;

Могут быть более простые решения для Java, например, использование Apache Commons UrlValidator class

UrlValidator urlValidator = new UrlValidator();
urlValidator.isValid("http://<your service url>");

или используйте такой метод, который получает код ответа

public static int getResponseCode(String urlString) throws MalformedURLException, IOException {
    URL u = new URL(urlString); 
    HttpURLConnection huc =  (HttpURLConnection)  u.openConnection(); 
    huc.setRequestMethod("GET"); 
    huc.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 (.NET CLR 3.5.30729)");
    huc.connect(); 
    return huc.getResponseCode();
}

или попробуйте это: http://www.java -tips.org / java-se-tips / java.net / check-if-a-page-существующие-2.html

Скажите, какой из них работал для вас ..

...