Spring-WS WSDL 生成问题 [英] Spring-WS WSDL Generation Problem
问题描述
我正在尝试制作一个非常简单的 Web 服务,但在使 spring 生成正确的 wsdl 时遇到了一些困难.我已尽力从这个 春季教程.如果有人知道我做错了什么,我将非常感谢您的帮助.
I'm trying to make a very simple web service and am having some difficulties making spring generate the correct wsdl. I've done my best to copy the example from this spring tutorial. If anyone has a clue about what I'm doing wrong I'd really appreciate the help.
本质上,有一个名为 IncidentHeaderEndpoint 的 EndPoint(目前没有功能).我想调用客户端以以下形式发送 xml 请求:
In essence, there is a single EndPoint called IncidentHeaderEndpoint (which currently has no functionality). I want calling clients send an xml request in the form:
<browseIncidents>
<responsibleManager>foo</responsibleManager>
</browseIncidents>
我的端点如下所示:
public class IncidentHeaderEndpoint extends AbstractJDomPayloadEndpoint {
XPath respMgrExpression;
public IncidentHeaderEndpoint() {
Namespace namespace = Namespace.getNamespace("trust-service", "http://act-informatics.co.uk/trust-service/schemas");
try {
respMgrExpression = XPath.newInstance("//trust-service:StartDate");
respMgrExpression.addNamespace(namespace);
} catch (JDOMException e) {
e.printStackTrace();
}
}
protected Element invokeInternal(Element request) throws Exception {
String respMgr = respMgrExpression.valueOf(request);
return null;
}
}
当我在 tomcat 中部署时,我收到以下警告:
When I deploy in tomcat I get the following warnings:
14-Oct-2010 13:08:43 org.springframework.ws.wsdl.wsdl11.provider.DefaultMessagesProvider addMessages
WARNING: No messages were created, make sure the referenced schema(s) contain elements
14-Oct-2010 13:08:43 org.springframework.ws.wsdl.wsdl11.provider.AbstractPortTypesProvider createOperations
WARNING: No operations were created, make sure the WSDL contains messages
这是我的弹簧配置:
<!-- TRUST WEB SERVICES -->
<bean id="incidentHeaderEndpoint" class="co.uk.act.cics.ws.IncidentHeaderEndpoint" />
<!-- Routing Mapping -->
<bean class="org.springframework.ws.server.endpoint.mapping.PayloadRootQNameEndpointMapping">
<property name="mappings">
<props>
<prop key="{http://act-informatics.co.uk/trust-service/schemas}BrowseIncidents">incidentHeaderEndpoint</prop>
</props>
</property>
<property name="interceptors">
<bean
class="org.springframework.ws.server.endpoint.interceptor.PayloadLoggingInterceptor" />
</property>
</bean>
<!-- WSDL Generation -->
<bean id="browse" class="org.springframework.ws.wsdl.wsdl11.DefaultWsdl11Definition">
<property name="schema" ref="trust-schema" />
<property name="portTypeName" value="TrustService" />
<property name="locationUri" value="http://localhost:8080/trust-service/browseIncidents/" />
<property name="targetNamespace" value="http://act-informatics.co.uk/trust-service/definitions"/>
</bean>
<bean id="trust-schema" class="org.springframework.xml.xsd.SimpleXsdSchema">
<property name="xsd" value="/WEB-INF/trust-service.xsd" />
</bean>
这是我的架构 - WEB-INF/trust-service.xsd:
This is my Schema - WEB-INF/trust-service.xsd:
<?xml version="1.0" encoding="UTF-8"?>`
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://act-informatics.co.uk/trust-service/schemas" xmlns:schemas="http://act-informatics.co.uk/trust-service/schemas">
<xs:element name="browseIncidents">
<xs:complexType>
<xs:sequence>
<xs:element name="responsibleManager" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
这是位于 http://localhost:8080/trust- 的有问题的 WSDLservice/browseIncidents/browse.wsdl:
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions xmlns:sch="http://act-informatics.co.uk/trust-service/schemas" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://act-informatics.co.uk/trust-service/definitions" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://act-informatics.co.uk/trust-service/definitions">
<wsdl:types>
<xs:schema xmlns:schemas="http://act-informatics.co.uk/trust-service/schemas" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://act-informatics.co.uk/trust-service/schemas">
<xs:element name="browseIncidents">
<xs:complexType>
<xs:sequence>
<xs:element name="responsibleManager" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
</wsdl:types>
<wsdl:portType name="TrustService">
</wsdl:portType>
<wsdl:binding name="TrustServiceSoap11" type="tns:TrustService">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
</wsdl:binding>
<wsdl:service name="TrustServiceService">
<wsdl:port binding="tns:TrustServiceSoap11" name="TrustServiceSoap11">
<soap:address location="http://localhost:8080/trust-service/browseIncidents/"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
推荐答案
xsd 中的输入和输出元素名称的后缀应为 Request 和 Response.那么只有 spring-ws 会将其识别为输入和输出参数.
The input and output element names in your xsd should have suffix as Request and Response. then only spring-ws will identify it as input and output parameters.
如果你有元素 OrderRequest 和 OrderResponse,一个名为 Order 的操作将被创建,输入和输出为 OrderRequest 和 OrderResponse
if you have elements OrderRequest and OrderResponse, an operation with name Order will get created with input and output as OrderRequest and OrderResponse
这篇关于Spring-WS WSDL 生成问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!