Следующий код использует контекст сервлета для получения параметров запроса.Я предоставил два метода.Первый метод просто использует числа, переданные через запрос 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 предоставляет еще больше примеров.