Как правильно написать провайдера веб-услуг, используя JAX-RI? - PullRequest
0 голосов
/ 03 апреля 2020

Недавно я провел учебное пособие по обучению созданию веб-сервисов с использованием JAX-WS. Урок здесь: https://www.baeldung.com/jax-ws, и я не могу не рекомендовать его. Поэтому я создал веб-сервис, используя нисходящий подход. К счастью, мне не удается его опубликовать. Когда я запускаю класс издателя, выводимое сообщение, определенное в wsdl-файле, не отображается. Мой звонок http://localhost/employeeservicetopdown?wsdl безрезультатен, но есть сообщение, что элемент root не найден.

Вот файл wsdl:

<?xml version="1.0" encoding="UTF-8"?>
<definitions
  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
  xmlns:tns="http://topdown.server.jaxws.baeldung.com/"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns="http://schemas.xmlsoap.org/wsdl/"
  targetNamespace="http://topdown.server.jaxws.baeldung.com/"
  qname="">
    <types>
        <xsd:schema
          targetNamespace="http://topdown.server.jaxws.baeldung.com/">
            <xsd:element name="countEmployeesResponse" type="xsd:int"/>
        </xsd:schema>
    </types>
    <message name="countEmployees">
    </message>
    <message name="countEmployeesResponse">
        <part name="parameters" element="tns:countEmployeesResponse"/>
    </message>
    <portType name="EmployeeServiceTopDown">
        <operation name="countEmployees">
            <input message="tns:countEmployees"/>
            <output message="tns:countEmployeesResponse"/>
        </operation>
    </portType>
    <binding name="EmployeeServiceTopDownSOAP"
      type="tns:EmployeeServiceTopDown">
        <soap:binding transport="http://schemas.xmlsoap.org/soap/http"
          style="document"/>
        <operation name="countEmployees">
            <soap:operation
              soapAction="http://topdown.server.jaxws.baeldung.com/
              EmployeeServiceTopDown/countEmployees"/>
            <input>
                <soap:body use="literal"/>
            </input>
            <output>
                <soap:body use="literal"/>
            </output>
        </operation>
    </binding>
    <service name="EmployeeServiceTopDown">
        <port name="EmployeeServiceTopDownSOAP"
          binding="tns:EmployeeServiceTopDownSOAP">
            <soap:address
              location="http://localhost:80/employeeservicetopdown"/>
        </port>
    </service>
</definitions>

Вот поставщик услуг.

package com.baeldung.jaxws.server.topdown;

import java.net.MalformedURLException;
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import javax.xml.ws.WebEndpoint;
import javax.xml.ws.WebServiceClient;
import javax.xml.ws.WebServiceException;
import javax.xml.ws.WebServiceFeature;


/**
 * This class was generated by the JAX-WS RI.
 * JAX-WS RI 2.2.9-b130926.1035
 * Generated source version: 2.2
 *
 */
@WebServiceClient(name = "EmployeeServiceTopDown", targetNamespace = "http://topdown.server.jaxws.baeldung.com/", wsdlLocation = "file:/C:/xampp/htdocs/quickstart/src/main/java/employeeservicetopdown.wsdl")
public class EmployeeServiceTopDown_Service
    extends Service
{

    private final static URL EMPLOYEESERVICETOPDOWN_WSDL_LOCATION;
    private final static WebServiceException EMPLOYEESERVICETOPDOWN_EXCEPTION;
    private final static QName EMPLOYEESERVICETOPDOWN_QNAME = new QName("http://topdown.server.jaxws.baeldung.com/", "EmployeeServiceTopDown");

    static {
        URL url = null;
        WebServiceException e = null;
        try {  //"http://localhost/employeeservicetopdown"  "file:/C:/xampp/htdocs/quickstart/src/main/java/employeeservicetopdown.wsdl"[x]
            url = new URL("http://localhost/employeeservicetopdown");
        } catch (MalformedURLException ex) {
            e = new WebServiceException(ex);
        }
        EMPLOYEESERVICETOPDOWN_WSDL_LOCATION = url;
        EMPLOYEESERVICETOPDOWN_EXCEPTION = e;
    }

    public EmployeeServiceTopDown_Service() {
        super(__getWsdlLocation(), EMPLOYEESERVICETOPDOWN_QNAME);
    }

    public EmployeeServiceTopDown_Service(WebServiceFeature... features) {
        super(__getWsdlLocation(), EMPLOYEESERVICETOPDOWN_QNAME, features);
    }

    public EmployeeServiceTopDown_Service(URL wsdlLocation) {
        super(wsdlLocation, EMPLOYEESERVICETOPDOWN_QNAME);
    }

    public EmployeeServiceTopDown_Service(URL wsdlLocation, WebServiceFeature... features) {
        super(wsdlLocation, EMPLOYEESERVICETOPDOWN_QNAME, features);
    }

    public EmployeeServiceTopDown_Service(URL wsdlLocation, QName serviceName) {
        super(wsdlLocation, serviceName);
    }

    public EmployeeServiceTopDown_Service(URL wsdlLocation, QName serviceName, WebServiceFeature... features) {
        super(wsdlLocation, serviceName, features);
    }

    /**
     *
     * @return
     *     returns EmployeeServiceTopDown
     */
    @WebEndpoint(name = "EmployeeServiceTopDownSOAP")
    public EmployeeServiceTopDown getEmployeeServiceTopDownSOAP() {
        return super.getPort(new QName("http://topdown.server.jaxws.baeldung.com/", "EmployeeServiceTopDownSOAP"), EmployeeServiceTopDown.class);
    }

    /**
     *
     * @param features
     *     A list of {@link javax.xml.ws.WebServiceFeature} to configure on the proxy.  Supported features not in the <code>features</code> parameter will have their default values.
     * @return
     *     returns EmployeeServiceTopDown
     */
    @WebEndpoint(name = "EmployeeServiceTopDownSOAP")
    public EmployeeServiceTopDown getEmployeeServiceTopDownSOAP(WebServiceFeature... features) {
        return super.getPort(new QName("http://topdown.server.jaxws.baeldung.com/", "EmployeeServiceTopDownSOAP"), EmployeeServiceTopDown.class, features);
    }

    private static URL __getWsdlLocation() {
        if (EMPLOYEESERVICETOPDOWN_EXCEPTION!= null) {
            throw EMPLOYEESERVICETOPDOWN_EXCEPTION;
        }
        return EMPLOYEESERVICETOPDOWN_WSDL_LOCATION;
    }

}

Это веб-сервис.

package com.baeldung.jaxws.server.topdown;

import javax.inject.Inject;
import javax.jws.WebMethod;
import javax.jws.WebService;

@WebService(
  name = "EmployeeServiceTopDown",
  endpointInterface = "com.baeldung.jaxws.server.topdown.EmployeeServiceTopDown",
  targetNamespace = "http://topdown.server.jaxws.baeldung.com/")
public class EmployeeServiceTopDownImpl
  implements EmployeeServiceTopDown {

    @Inject
    private EmployeeRepository employeeRepositoryImpl;

    @WebMethod
    public int countEmployees() {
        return employeeRepositoryImpl.count();
    }
}

Мне не удалось найти ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...