无法从浏览器访问已部署的 Web 服务
Not able to hit the deployed webservice from browser
创建了一个示例 wsdl。使用 CXF 框架从 wsdl 生成 Java 对象。一切都很好,我能够从本地测试 class.
测试服务实现
但是当我在 Tomcat 中部署并点击 url 时,我没有获得所有已部署的服务。
Web.xml
<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
spring.xml
<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
<jaxws:endpoint id="testWS" implementor="#helloWorldService"
address="/testWS">
</jaxws:endpoint>
<bean id="helloWorldService" class="com.test.ws.service.HelloWorldServiceImpl" />
testing.wsdl
Have included the below snippet as well
<wsdl:service name="HelloWorldService">
<wsdl:port name="HelloWorldPort" binding="tns:HelloWorldServiceSoapBinding">
<soap:address location="http://localhost:8080/HelloWorldPort" />
</wsdl:port>
</wsdl:service>
已通过测试 class 测试,工作正常。
HelloWorldServiceImpl helloWorldService = (HelloWorldServiceImpl) context.getBean("helloWorldService");
SayHi hi = new SayHi();
hi.setText("Webservice Sample");
helloWorldService.sayHi(hi);
AdditionInput input = new AdditionInput();
input.setInput1(10);
input.setInput2(100);
System.out.println(" Addition Output : " + helloWorldService.addtion(input).getResult());
但无济于事。请指出我在这里遗漏了什么,这里应该有一些小错误。
URL 是这样构造的:
http://<server>:<port>/<context-root>/<url-pattern>/<service_name>?wsdl
而soap:address位置是这样的:
soap:address location="http://<server>:<port>/<context-root>/<url-pattern>/<service_name>.<port_name>"
因此,在您的情况下,这应该是配置:
<wsdl:service name="HelloWorldService">
<wsdl:port name="HelloWorldPort" binding="tns:HelloWorldServiceSoapBinding">
<soap:address location="http://localhost:8080/sampleproject/services/HelloWorldService.HelloWorldPort" />
</wsdl:port>
URL:
http://localhost:8080/sampleproject/services/HelloWorldService?wsdl
您可以将 jaxws:endpoint
地址更改为“/”。
如果您希望保留它,请在两个位置的 url-pattern
和 service_name
之间添加它。
创建了一个示例 wsdl。使用 CXF 框架从 wsdl 生成 Java 对象。一切都很好,我能够从本地测试 class.
测试服务实现但是当我在 Tomcat 中部署并点击 url 时,我没有获得所有已部署的服务。
Web.xml
<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
spring.xml
<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
<jaxws:endpoint id="testWS" implementor="#helloWorldService"
address="/testWS">
</jaxws:endpoint>
<bean id="helloWorldService" class="com.test.ws.service.HelloWorldServiceImpl" />
testing.wsdl
Have included the below snippet as well
<wsdl:service name="HelloWorldService">
<wsdl:port name="HelloWorldPort" binding="tns:HelloWorldServiceSoapBinding">
<soap:address location="http://localhost:8080/HelloWorldPort" />
</wsdl:port>
</wsdl:service>
已通过测试 class 测试,工作正常。
HelloWorldServiceImpl helloWorldService = (HelloWorldServiceImpl) context.getBean("helloWorldService");
SayHi hi = new SayHi();
hi.setText("Webservice Sample");
helloWorldService.sayHi(hi);
AdditionInput input = new AdditionInput();
input.setInput1(10);
input.setInput2(100);
System.out.println(" Addition Output : " + helloWorldService.addtion(input).getResult());
但无济于事。请指出我在这里遗漏了什么,这里应该有一些小错误。
URL 是这样构造的:
http://<server>:<port>/<context-root>/<url-pattern>/<service_name>?wsdl
而soap:address位置是这样的:
soap:address location="http://<server>:<port>/<context-root>/<url-pattern>/<service_name>.<port_name>"
因此,在您的情况下,这应该是配置:
<wsdl:service name="HelloWorldService">
<wsdl:port name="HelloWorldPort" binding="tns:HelloWorldServiceSoapBinding">
<soap:address location="http://localhost:8080/sampleproject/services/HelloWorldService.HelloWorldPort" />
</wsdl:port>
URL:
http://localhost:8080/sampleproject/services/HelloWorldService?wsdl
您可以将 jaxws:endpoint
地址更改为“/”。
如果您希望保留它,请在两个位置的 url-pattern
和 service_name
之间添加它。