5

我正在使用 jboss 4.2 服务器在 Eclipse 上开发一个 Web 服务示例。我创建了一个服务实现类,如下所示:

import java.util.HashMap;
import java.util.Map;

import javax.jws.WebMethod;
import javax.jws.WebService;

@WebService
public class CarWebServiceImpl  {

    private final Map<String, Integer> prices = new HashMap<String, Integer>();

    public CarWebServiceImpl() {
        prices.put("audi", Integer.valueOf(10000));
        prices.put("bmw", Integer.valueOf(150000));
        prices.put("fiat", Integer.valueOf(5000));
    }

    @WebMethod
    public Response getCarPrice(String carId) {
        int price = prices.get(carId);
        Response resp = new Response();
        resp.setPrice(price);
        return resp;
    }

}

Web 服务会自动部署到服务器中,我可以在以下位置看到我的服务

http://127.0.0.1:8080/jbossws/services/

我创建了另一个项目并使用 wsconsume 实用程序生成客户端类文件。然后我将服务类实例化如下:

public class Client {
    public static void main(String[] args) {
        CarWebServiceImplService service = new CarWebServiceImplService();
        CarWebServiceImpl port = service.getCarWebServiceImplPort();
        port.getCarPrice("audi");
    }
}

但是当我尝试运行客户端代码时,出现以下错误

Exception in thread "main" javax.xml.ws.WebServiceException: No Content-type in the header!
    at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:172)
    at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:83)
    at com.sun.xml.internal.ws.transport.DeferredTransportPipe.processRequest(DeferredTransportPipe.java:105)
    at com.sun.xml.internal.ws.api.pipe.Fiber.__doRun(Fiber.java:587)
    at com.sun.xml.internal.ws.api.pipe.Fiber._doRun(Fiber.java:546)
    at com.sun.xml.internal.ws.api.pipe.Fiber.doRun(Fiber.java:531)
    at com.sun.xml.internal.ws.api.pipe.Fiber.runSync(Fiber.java:428)
    at com.sun.xml.internal.ws.client.Stub.process(Stub.java:211)
    at com.sun.xml.internal.ws.client.sei.SEIStub.doProcess(SEIStub.java:124)
    at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:98)
    at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:78)
    at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:107)
    at $Proxy25.getCarPrice(Unknown Source)
    at wsclient.Client.main(Client.java:7)

我不知道我的方法有什么问题。请帮忙。提前致谢。

4

2 回答 2

3

事实证明,JBoss 的认可文件夹中缺少一些 jar。

jbossws-jaxws.jar
jbossws-jaxws-ext.jar
jbossws-jaxrpc.jar
jbossws-saaj.jar

我将这些 jar 从 /client 移到 /lib/endorsed 并重新启动服务器,代码正常工作。

于 2013-09-20T06:59:27.693 回答
0

您也可能使用了错误版本的 SOAP:

  • SOAP 1.1 使用 text/xml
  • SOAP 1.2 使用 application/soap+xml

当您的设置的一个组件正在发送 SOAP 1.1 而另一个正在等待 SOAP 1.2 或相反时,就会发生这种情况。

例如:如果你想使用 SOAP 1.2

在 sun-jaxws.xml 的 enpoint 声明中添加绑定标签,类似于

<endpoint
    name="Authenticate"
    interface="com.xyz.interface"        
    implementation="com.xyz.interfaceimpl"
    binding="http://java.sun.com/xml/ns/jaxws/2003/05/soap/bindings/HTTP/"
    url-pattern="/xyz/abc/service" />

希望这有帮助:)

于 2014-07-17T09:41:01.950 回答