当前位置: 首页 > 知识库问答 >
问题:

wsdl 2 Java:使用apache cxf部署web服务

阴礼骞
2023-03-14

我试图使用eclipse、tomcat和CXF部署一个简单的Web服务。

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.negozio.org" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.negozio.org">

<wsdl:types>
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified"  targetNamespace="http://www.negozio.org" >

    <xsd:complexType name="findTicketsRequest">
        <xsd:sequence>
            <xsd:element name="from" type="xsd:string" />
            <xsd:element name="to" type="xsd:string" />
            <xsd:element name="hour" type="tns:hourType" />
        </xsd:sequence>
    </xsd:complexType>

    <xsd:complexType name="findTicketsResponse">
        <xsd:sequence maxOccurs="unbounded">
            <xsd:element name="ID" type="tns:IDType" />
            <xsd:element name="hour" type="tns:hourType" />
            <xsd:element name="minutes" type="tns:minutesType" />
            <xsd:element name="quantity" type="xsd:integer" />
        </xsd:sequence>
    </xsd:complexType>

    <xsd:simpleType name="hourType">
        <xsd:restriction base="xsd:integer">
            <xsd:minInclusive value="0"/>
            <xsd:maxInclusive value="23"/>
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="minutesType">
        <xsd:restriction base="xsd:integer">
            <xsd:minInclusive value="0"/>
            <xsd:maxInclusive value="59"/>
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="IDType">
        <xsd:restriction base="xsd:string">
            <xsd:pattern  value="[0-9]{4}"/>
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:element name="ricercaRequest" type="tns:findTicketsRequest"></xsd:element>
    <xsd:element name="ricercaResponse" type="xsd:boolean" />

</xsd:schema>   
</wsdl:types>

<wsdl:message name="ricercaMessage">
 <wsdl:part name="ricercaMessagePart" element="tns:ricercaRequest"/>
</wsdl:message>

<wsdl:message name="ricercaResponseMessage">
 <wsdl:part  name="ricercaResponsePart" element="tns:ricercaResponse"/>
</wsdl:message>

<wsdl:portType name="ServiceSearchPortType">
 <wsdl:operation name="findTickets">
   <wsdl:input message="tns:ricercaMessage" />
   <wsdl:output message="tns:ricercaResponseMessage" />
 </wsdl:operation>
</wsdl:portType>

<wsdl:binding name="ServiceSearchBinding" type="tns:ServiceSearchPortType">
 <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
   <wsdl:operation name="findTickets">
   <soap:operation soapAction="" />
   <wsdl:input>
     <soap:body use="literal" />
   </wsdl:input>
   <wsdl:output>
     <soap:body use="literal" />
   </wsdl:output>
 </wsdl:operation>
</wsdl:binding>

<wsdl:service name="SearchTicketsService">
  <wsdl:port  name="SearchPort" binding="tns:ServiceSearchBinding">
    <soap:address location="http://localhost:8080/WS1/ServiceSearchPortType" />
  </wsdl:port>
</wsdl:service>

</wsdl:definitions>

3)看起来一切都很好。将web.xml和beans.xml文件添加到WEB-INF文件夹中:

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<listener>
    <listener-class>
        org.springframework.web.context.ContextLoaderListener
    </listener-class>
</listener>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>WEB-INF/beans.xml</param-value>
</context-param>

<servlet>
    <display-name>CXF Servlet</display-name>        
    <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>/*</url-pattern>
    </servlet-mapping>
</web-app>

beans.xml

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">

<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />

<jaxws:endpoint 
  id="ricerca" 
  implementor="org.negozio.ServiceSearchPortTypeImpl" 
  address="/ServiceSearchPortType" />

</beans>

共有1个答案

赫连法
2023-03-14

您使用的URL似乎不对。

  1. 登录tomcat管理器http://localhost:8080/manager/html
  2. 获取web应用程序的路径(上下文路径)。
  3. 现在使用http://localhost:8080/[您在上一步中获得的上下文路径]/services
  4. 的浏览器
  5. 这些服务将列出该应用程序中所有可用的WSDL或WADL(实际上是endpoint)。
  6. 您可以单击WSDL url查看WSDL
 类似资料:
  • 我尝试在weblogic服务器上部署使用Spring apache cxf的应用程序。我一直收到这条错误消息: javax。servlet。ServletException:Servlet类:org。阿帕奇。cxf。运输servlet。CXFServlet’不实现javax。servlet。weblogic上的Servlet。servlet。内部的StubSecurityHelper$Servle

  • 比较早之前,部署 Java web 服务只是单纯使用 Tomcat 做 Web 服务器,前后端代码融合在一个工程之中。Tomcat 启动后对外提供一个端口接收和相应 http请求。随着 Nginx 的越来越流行,同时加上其优秀的反响代理和负载均衡功能,我们在线上的 Java web 通常会结合二者,即使用 Nginx + Tomcat 的方式来部署 Java web 服务。最近两年,随着微服务化和

  • 我正在编写一个简单的RESTful Web服务,使用Java、tomcat7、jersey和IDE eclipse。 当我使用eclipse(服务器)启动web服务时,它运行良好。我测试了GET和POST方法。但当我在WAR文件中导出应用程序并使用tomcat manage UI部署时。它返回404 not found状态。 下面是一个例子: 这里是网络。xml: 有人能解释在eclipse中启动

  • 我有一个基于ofbizsoap的web服务,它是公开的(可以接受请求),并且生成了WSDL代码和WSDL URL。我的问题是,有没有一种方法可以使用CXF Java客户端或JAX-WS客户端使用此web服务? 总的来说,我希望能够将客户机添加到Mule esb组件中,作为Mule流的一部分。我可以使用AXIS2调用Obiz web服务,但Mule ESB似乎不支持AXIS2,这给我带来了另一个问题

  • 我很难让web服务在WebSphere上工作。我有一个ejb-jar,它使用JAXWS注释@WebService定义了一个web服务。然后这个ejb-jar被打包到一个EAR中。我已经成功地将ear部署到Glassfish上,并且能够访问我的WebService。但是,当我试图将相同的ear部署到WebSphere8.5中时,我没有看到任何公开的WebService。为了使这个ear在WebSph

  • 当一个 Web 应用程序部署到容器中,在 Web 应用程序开始处理客户端请求之前,必须按照下述步骤顺序执行。 实例化部署描述文件中<listener>元素标识的每个事件监听器的一个实例。 对于已实例化的实现了 ServletContextListener 接口的监听器实例,调用 contextInitialized() 方法。 实例化部署描述文件中<filter>元素标识的每个过滤器的一个实例,并