Spring web服务流
我是春季Web服务的新手,在为阶乘服务编写示例程序之后,我留下了一些疑问。 我认为这是春季Web服务的工作原理:
应用程序在服务器上运行并生成一个请求 - >请求发送到web.xml中定义的调度程序servlet - >调度程序servlet查找[servlet-name] -servlet.xml - >调度程序servlet然后查找payloadroot,正确的端点 - > xml请求到达终点 - >响应由端点生成
现在我的疑惑是:
以下是bean定义,即: [servlet-name]-servlet.xml
文件:
<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>
XSD不生成xml,它用于验证它。 人们也在写客户端来了解如何形成他们的XML以发送给您的服务。 “请求”是某种类型的客户端向您的服务发送的消息 - 它通常通过http协议(万维网协议)进入您的服务。
您在代码中提到,这意味着合同优先 - 这意味着您应该在执行任何其他操作之前编写wsdl(尽管这通常与描述接口的xsd一起完成)。 然后,可以使用wsdl和一些注释来配置Spring,以便处理消息 - 甚至可以使用jaxb直接将代码自动绑定到代码中的java对象中,以便您不必手动分析传入的xml有效内容。
这是旧的,但它遵循您使用的相同方法,甚至使用相同的弃用春季课程。
现在很多开发人员都采用WS- *风格的Web服务来支持基于REST的Web服务,这些Web服务通过使用spring-web和spring-mvc以及java pojo上的一些简单注释非常容易实现。 如果你愿意的话,甚至可以让spring自动将你的xml载荷绑定到从xsd生成的java对象上,这样你就不必在任何时候实际处理XML。
JAXB
序列化为xml并从请求中解析。 JAX-WS
,则WSDL
将在运行时生成(默认情况下),但也可以提供预生成的WSDL
。 要解决您的评论:
如果你看看spring-ws-core
maven的依赖关系,你会发现它依赖于spring-oxm
(对xml < - >对象映射的抽象),它依赖于jaxb-api
项目。
仔细看看你的依赖中实际使用的是什么。 JAXB可能来自应用程序服务器库/文件夹。
第二点。 JAXB不仅用于序列化为xml,还可以从xml反序列化。
链接地址: http://www.djcxy.com/p/71717.html