Пример веб-службы Java начался с "java.lang.NullPointerException", как это исправить? - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть простой пример программы веб-службы java из Интернета:

import javax.jws.WebParam;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;
import java.util.Date;

@WebService
interface IService {
    void hello(@WebParam(name="username") String username);
}

@WebService(targetNamespace = "ServiceImpl", endpointInterface="IService")
class ServiceImp implements IService{
    @Override
    public void hello(@WebParam(name = "username") String username) {
        System.out.println("hello " + username + " now is " + new Date());
    }
}

public class ServiceMain {
    public static void main(String[] args) {
        String address = "http://localhost:7777/myService";
        Endpoint.publish(address, new ServiceImp());
        System.out.println("OK");
    }
}

Он компилируется и запускается с исключением:

Exception in thread "main" java.lang.NullPointerException
at com.sun.xml.internal.ws.model.RuntimeModeler.getPortTypeName(RuntimeModeler.java:1618)
at com.sun.xml.internal.ws.model.RuntimeModeler.getPortTypeName(RuntimeModeler.java:1584)
at com.sun.xml.internal.ws.server.EndpointFactory.create(EndpointFactory.java:226)
at com.sun.xml.internal.ws.server.EndpointFactory.createEndpoint(EndpointFactory.java:144)
at com.sun.xml.internal.ws.api.server.WSEndpoint.create(WSEndpoint.java:563)
at com.sun.xml.internal.ws.api.server.WSEndpoint.create(WSEndpoint.java:545)
at com.sun.xml.internal.ws.transport.http.server.EndpointImpl.createEndpoint(EndpointImpl.java:308)
at com.sun.xml.internal.ws.transport.http.server.EndpointImpl.publish(EndpointImpl.java:231)
at com.sun.xml.internal.ws.spi.ProviderImpl.createAndPublishEndpoint(ProviderImpl.java:126)
at javax.xml.ws.Endpoint.publish(Endpoint.java:240)
at ServiceMain.main(ServiceMain.java:22)

Так откуда же получается этот фрагмент коданеправильно, а как это исправить?Большое спасибо.

1 Ответ

0 голосов
/ 27 декабря 2018

Необходимо указать полное имя для интерфейса конечной точки.Попробуйте это, если хотите потерять интерфейс конечной точки.

import javax.jws.WebParam;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;
import java.util.Date;


interface IService {
    void hello(String username);
}

@WebService(targetNamespace = "ServiceImpl")
class ServiceImp implements IService{

    public void hello(@WebParam(name = "username") String username) {
         System.out.println("hello " + username + " now is " + new Date());
    }
}

public class ServiceMain {
    public static void main(String[] args) {
        String address = "http://localhost:7777/myService";
        Endpoint.publish(address, new ServiceImp());
        System.out.println("OK");
    }
}

В противном случае, если ваш интерфейс конечной точки находится в пакете с именем your.pkg, попробуйте это.

package your.pkg;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;
import java.util.Date;

@WebService
interface IService {
    void hello(String username);
}

@WebService(targetNamespace = "ServiceImpl", endpointInterface="your.pkg.IService")
class ServiceImp implements IService{

    public void hello(@WebParam(name = "username") String username) {
         System.out.println("hello " + username + " now is " + new Date());
    }
}

public class ServiceMain {
    public static void main(String[] args) {
        String address = "http://localhost:7777/myService";
        Endpoint.publish(address, new ServiceImp());
        System.out.println("OK");
    }
}

Я смогзапустите его с обоими подходами и начните получать WSDL с конечной точки: - http://localhost:7777/myService?wsdl

...