Как получить доступ к параметру запроса из URL в SOAP WS? - PullRequest
0 голосов
/ 10 октября 2018

Я хочу создать метод службы SOAP, который будет использовать данные из URL в качестве параметра запроса.Но я не уверен, как мы можем передать данные в качестве параметра запроса в SOAP URL.Я создал метод приема данных, как показано ниже, но он будет получен из запроса SOAP: Также дайте мне знать, как мы будем передавать данные в параметре Query из SOAP UI:

@WebMethod
    public String test(String str){

        System.out.println("Test method called:"+ str);
        return str;

    }

Было бы очень полезно, еслилюбой из вас поможет мне.Заранее спасибо!

1 Ответ

0 голосов
/ 11 октября 2018

Следующий код использует контекст сервлета для получения параметров запроса.Я предоставил два метода.Первый метод просто использует числа, переданные через запрос SOAP.Второй метод имеет дело с одним или несколькими переданными параметрами запроса и дает два примера доступа к параметрам запроса.

package net.myco.ws;

import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;

import javax.annotation.Resource;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.servlet.http.HttpServletRequest;
import javax.xml.ws.WebServiceContext;
import javax.xml.ws.handler.MessageContext;

@WebService
public class SOAPWSWithQueryParam {

    @Resource
    private WebServiceContext ctx;

    /**
     * Default no arg constructor
     */
    public SOAPWSWithQueryParam() {
        super();
    }

    /*
     * Web Service that adds two numbers together
     */
    @WebMethod
    public int addTwoNumbers(
            @WebParam(name="inputNumber1") int inputNumber1,
            @WebParam(name="inputNumber2") int inputNumber2
            ){

        int result;
        result = inputNumber1 + inputNumber2;
        return result;
    }

    /*
     * Web Service that adds two numbers together, *but* also inspects
     * the HTTP POST for a single queryParam and adds that as well.
     * 
     * Example URL:
     * http://localhost:8080/SOAPWSWithQueryParam/SOAPWSWithQueryParam?number1=8&number2=6
     * 
     * Note, we're only getting the first query param, we could split based on "&" and get
     * other params.
     * 
     */
    @WebMethod
    public int addThreeNumbers(
            @WebParam(name="inputNumber1") int inputNumber1,
            @WebParam(name="inputNumber2") int inputNumber2
            ){

        int result;
        int queryStringNumber1 = 0;
        Map <String, String[]>quesryStringMap;

        HttpServletRequest servletRequest = (HttpServletRequest) ctx.getMessageContext().get(MessageContext.SERVLET_REQUEST);

        /*
         * Likely want to add a try catch on this or other logic in case there isn't a query string param. 
         * Also, because the example URL contains a second param, we split again at the "&" in URL else the 
         * result would be "8&number2"
         */
        queryStringNumber1 = Integer.valueOf(servletRequest.getQueryString().split("=")[1].split("&")[0]);

        /*
         * The second and more elegant way of accomplishing it is using the Parameters Map, because we're
         * adding the second way of doing it, the returned value is increased as it was 17 based on our URL 
         * and the WS two input numbers.  Now it becomes 31.
         * 
         */
        quesryStringMap = servletRequest.getParameterMap();
        Iterator<Entry<String, String[]>> mapIterator = quesryStringMap.entrySet().iterator();
        while (mapIterator.hasNext()) {
            Map.Entry<String, String[]> pair = (Entry<String, String[]>)mapIterator.next();
            System.out.println(pair.getKey() + " = " + pair.getValue()[0]);
            /*
             * Prints:
             07:43:57,666 INFO  [stdout] (default task-10) number1 = 8
             07:43:57,666 INFO  [stdout] (default task-10) number2 = 6
             */

            //Add the other param values
            queryStringNumber1 += Integer.valueOf(pair.getValue()[0]);

            mapIterator.remove();
        }

        result = inputNumber1 + inputNumber2 + queryStringNumber1;

        return result;
    }

}

Из пользовательского интерфейса SOAP после создания нового проекта SOAP это будет выглядеть так:Мы показали два примера (правая панель), первый пример вызывает метод веб-службы, который просто добавляет два числа, переданных в теле SOAP в качестве аргументов.Второй метод (снизу) сначала получает один параметр запроса, даже если их два, добавляет, что к queryStringNumber1 у него есть второй пример, который использует итератор для итерации по карте параметров, а затем добавляет любые переданные значения в queryStringNumber1.Наконец, он добавляет входные переменные мыла к queryStringNumber1 и возвращает это значение.Вы также можете использовать Binding Provider, например, назначение bindingprovider в веб-службе jax-ws , и Google предоставляет еще больше примеров.

SOAP UI Example

...