Spring Web服务流程

Cha*_*eep 7 java spring web-services java-ee

我是初学网络服务的新手,在为一个阶乘服务编写示例程序后,我有些疑惑.我认为这是春季网络服务的工作原理:


应用程序在服务器上运行并生成一个请求 - >请求转到web.xml中定义的调度程序servlet - > dispatcher servlet查找[servlet-name] -servlet.xml - > dispatcher servlet然后查找找到的payloadroot右端点 - > xml请求转到结束点 - >端点生成响应


现在我的怀疑是:

  1. 到端点的请求是如何以XML格式提供的?我知道XSD有助于创建xml但是什么时候这样做?
  2. 在构建wsdl的整个过程中?

以下是bean定义,即:[servlet-name]-servlet.xmlfile:

<beans ...>
    <bean id="findFactorialService" class="springws.findFactorial.FindFactorialServiceImpl"/>

    <bean id="findFactorialServiceEndpoint" class="springws.findFactorial.endpoint.FindFactorialServiceEndpoint">
        <property name="findFactorialService" ref="findFactorialService" />
    </bean>

    <bean id="payloadMapping" class="org.springframework.ws.server.endpoint.mapping.PayloadRootQNameEndpointMapping">
            <property name="defaultEndpoint" ref="findFactorialServiceEndpoint" />
        </bean>

        <bean id="findFactorialSchema" class="org.springframework.xml.xsd.SimpleXsdSchema">
            <property name="xsd" value="/WEB-INF/findFactorialService.xsd"  />
        </bean>

        <bean id="findFactorial" class="org.springframework.ws.wsdl.wsdl11.DefaultWsdl11Definition">
            <property name="schema" ref="findFactorialSchema" />
            <property name="portTypeName" value="hello" />
            <property name="locationUri" value="http://localhost:7070/find-factorial-using-contractfirst/services" />
        </bean>
    </beans>
Run Code Online (Sandbox Code Playgroud)

Eng*_*ery 4

  1. XSD 不生成 xml,它用于验证它。编写客户端的人员也可以使用它来了解如何形成 xml 以发送到您的服务。“请求”是由某种客户端发送到您的服务的消息——它如何进入您的服务,通常是通过 http 协议(万维网协议)。

  2. 您在代码中提到,这意味着契约优先——这意味着您应该在执行其他操作之前编写 wsdl(尽管通常这是与描述接口的 xsd 一起完成的)。然后可以使用 wsdl 和一些注释来配置 Spring,以便处理消息——您甚至可以使用 jaxb 自动绑定,直接绑定到代码中的 java 对象,这样您就不必手动解析传入的 xml 有效负载。

这是旧的,但它遵循您正在使用的相同方法,甚至使用相同的已弃用的 spring 类。

如今,许多开发人员回避 WS-* 风格的 Web 服务,转而使用基于 REST 的 Web 服务,这些服务可以使用 spring-web 和 spring-mvc 轻松实现,并在 java pojo 上添加几个简单的注释。如果您愿意,您甚至可以让 spring 自动将您的 xml 有效负载绑定到从 xsd 生成的 java 对象,这样您就不必在任何时候实际处理 XML。