我正在使用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)
我不知道我的做法有什么问题。请帮忙。提前谢谢。
答案 0 :(得分:2)
原来,JBoss的背书文件夹中缺少一些jar。
jbossws-jaxws.jar
jbossws-jaxws-ext.jar
jbossws-jaxrpc.jar
jbossws-saaj.jar
我将这些jar从/ client移到了/ lib / endors并重新启动了服务器,代码工作没有缺陷。
答案 1 :(得分:0)
您也可能使用错误版本的SOAP:
当您的设置的一个组件发送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" />
希望这有帮助:)