Как вызвать удалённый метод веб-сервиса через строку браузера? | Java

154
05 сентября 2021, 20:10

Интерфейс:

@WebService
@SOAPBinding(style = SOAPBinding.Style.RPC)
public interface WsdlWebService {
    @WebMethod
    String getHelloString(String name);
}

Имплементация:

@WebService(endpointInterface = "com.example.javaws.WsdlWebService")
public class WsdlWebServiceImpl implements WsdlWebService
{
    @Override
    public String getHelloString(String name) {
        return "Hello, " + name + "!";
    }
}

Точка вызова:

public class WsdlWebServicePublisher
{
    public static void main(String[] args)
    {
        Endpoint.publish("http://10.104.1.134:8888/autocomet/services/", new WsdlWebServiceImpl());
    }
}

Писал следующий запрос, но ничего не выдало: http://10.104.1.134:8888/autocomet/services/WsdlWebServiceImplService/getHelloString?arg0=hello

Также вот wsdl:

<definitions xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://javaws.example.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://javaws.example.com/" name="WsdlWebServiceImplService">
    <types/>
    <message name="getHelloString">
        <part name="arg0" type="xsd:string"/>
    </message>
    <message name="getHelloStringResponse">
        <part name="return" type="xsd:string"/>
    </message>
    <portType name="WsdlWebService">
        <operation name="getHelloString">
            <input wsam:Action="http://javaws.example.com/WsdlWebService/getHelloStringRequest" message="tns:getHelloString"/>
            <output wsam:Action="http://javaws.example.com/WsdlWebService/getHelloStringResponse" message="tns:getHelloStringResponse"/>
        </operation>
    </portType>
    <binding name="WsdlWebServiceImplPortBinding" type="tns:WsdlWebService">
        <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc"/>
        <operation name="getHelloString">
            <soap:operation soapAction=""/>
            <input>
                <soap:body use="literal" namespace="http://javaws.example.com/"/>
            </input>
            <output>
                <soap:body use="literal" namespace="http://javaws.example.com/"/>
            </output>
        </operation>
    </binding>
    <service name="WsdlWebServiceImplService">
        <port name="WsdlWebServiceImplPort" binding="tns:WsdlWebServiceImplPortBinding">
            <soap:address location="http://10.104.1.134:8888/autocomet/services/"/>
        </port>
    </service>
</definitions>
Answer 1

Никак.

SOAP требует POST реквест.

Для вызова этого метода из браузера нужно использовать JavaScript.

Answer 2

что отдает браузер по адресу?

http://10.104.1.134:8888/autocomet/services/?wsdl

Клиент может быть таким

public class WWSClient { 
 
    public static void main(String[] args) throws Exception { 
 
        URL url = new URL("http://10.104.1.134:8888/autocomet/services/?wsdl"); 
        QName qname = new QName("http://javaws.example.com/", "WsdlWebServiceImplService"); 
        Service service = Service.create(url, qname); 
 
        WsdlWebService wws = service.getPort(WsdlWebService.class); 
 
        System.out.println(wws.getHelloString("Строка")); 
 
    } 
}

Браузер через строку умеет делать только GET-запросы Можно, например, добавить в приложение сервлет, который будет дергать метод Вебсервиса

READ ALSO
Промис в JavaScript

Промис в JavaScript

Полифил для PromiseallSettled:

116
Остановка таймера в DOM-элементе

Остановка таймера в DOM-элементе

Есть код таймера на JS:

90
События касания на мобильных браузерах

События касания на мобильных браузерах

Имеется компонент Vuejs, где на Div весит обработчик событий мыши

103