1
嘗試使用Maven使用soap web服務創建spring-boot項目。 項目設置是正確的,沒有任何編譯時間問題。彈簧啓動Web服務端點類不工作
已使用spring-boot-web-services依賴項。 當應用程序啓動時,我可以正確地看到wsdl,但是當我用恰當的輸入使用chrome wizdler進行操作時,我得到失敗。 甚至無法看到我的端點類中存在的打印語句。
需要確認我是否已經爲基於WSDL的註釋@PayloadRoot,@RequestPayload和@ResponsePayload提供了適當的值。
下面是我的WSDL和端點類:
WSDL文件
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="schemas.corporate.com/col/2014/01" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsa10="http://www.w3.org/2005/08/addressing" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="VaultNotificationService" targetNamespace="schemas.corporate.com/col/2014/01">
<wsp:Policy wsu:Id="BasicHttpBinding_IVaultNotificationService_policy">
<wsp:ExactlyOne>
<wsp:All>
<sp:TransportBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
<wsp:Policy>
<sp:TransportToken>
<wsp:Policy>
<sp:HttpsToken RequireClientCertificate="false" />
</wsp:Policy>
</sp:TransportToken>
<sp:AlgorithmSuite>
<wsp:Policy>
<sp:Basic256 />
</wsp:Policy>
</sp:AlgorithmSuite>
<sp:Layout>
<wsp:Policy>
<sp:Strict />
</wsp:Policy>
</sp:Layout>
</wsp:Policy>
</sp:TransportBinding>
</wsp:All>
</wsp:ExactlyOne>
</wsp:Policy>
<wsdl:types>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="urn:CorporateServices" elementFormDefault="qualified" targetNamespace="urn:CorporateServices">
<xs:element name="OrderUpdate">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" form="unqualified" name="OrderUpdateItemList" type="tns:OrderUpdateItem" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="OrderUpdateItem">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="1" form="unqualified" name="Order_ID" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="1" form="unqualified" name="Order_InternalID" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="1" form="unqualified" name="Order_Status" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:element name="OrderUpdateResponse">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" form="unqualified" name="OrderUpdateItemList" type="tns:OrderUpdateItem" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
</wsdl:types>
<wsdl:message name="UpdateRequest">
<wsdl:part xmlns:q1="urn:CorporateServices" name="parameters" element="q1:OrderUpdate" />
</wsdl:message>
<wsdl:message name="UpdateResponse">
<wsdl:part xmlns:q2="urn:CorporateServices" name="parameters" element="q2:OrderUpdateResponse" />
</wsdl:message>
<wsdl:portType name="IVaultNotificationService">
<wsdl:operation name="Update">
<wsdl:input wsaw:Action="schemas.corporate.com/col/2014/01/IVaultNotificationService/Update" name="UpdateRequest" message="tns:UpdateRequest" />
<wsdl:output wsaw:Action="schemas.corporate.com/col/2014/01/IVaultNotificationService/UpdateResponse" name="UpdateResponse" message="tns:UpdateResponse" />
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="BasicHttpBinding_IVaultNotificationService" type="tns:IVaultNotificationService">
<wsp:PolicyReference URI="#BasicHttpBinding_IVaultNotificationService_policy" />
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="Update">
<soap:operation soapAction="schemas.corporate.com/col/2014/01/IVaultNotificationService/Update" style="document" />
<wsdl:input name="UpdateRequest">
<soap:body use="literal" />
</wsdl:input>
<wsdl:output name="UpdateResponse">
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="VaultNotificationService">
<wsdl:port name="BasicHttpBinding_IVaultNotificationService" binding="tns:BasicHttpBinding_IVaultNotificationService">
<soap:address location="https://app.sit.col.corporate.com/VaultNotificationService.svc" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
端點類
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ws.server.endpoint.annotation.Endpoint;
import org.springframework.ws.server.endpoint.annotation.PayloadRoot;
import org.springframework.ws.server.endpoint.annotation.RequestPayload;
import org.springframework.ws.server.endpoint.annotation.ResponsePayload;
import colservices.OrderUpdate;
import colservices.OrderUpdateItem;
import colservices.OrderUpdateResponse;
@Endpoint
public class OrderUpdateEndpoint {
private final IVaultNotificationService vaultNotificationService;
@Autowired
public OrderUpdateEndpoint(IVaultNotificationService vaultNotificationService) {
this.vaultNotificationService = vaultNotificationService;
}
@PayloadRoot(namespace = "urn:CorporateServices", localPart = "UpdateRequest")
@ResponsePayload
public OrderUpdateResponse updateOrderStatus(@RequestPayload OrderUpdate request) {
System.out.println("Enetered in endpoint");
List<OrderUpdateItem> orderUpdateItemList = vaultNotificationService
.updateOrdersStatus(request.getOrderUpdateItemList());
OrderUpdateResponse response = new OrderUpdateResponse();
response.getOrderUpdateItemList().addAll(orderUpdateItemList);
return response;
}
}
請讓我知道我錯過了。
ApplicationConfig
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.ws.config.annotation.EnableWs;
import org.springframework.ws.config.annotation.WsConfigurerAdapter;
import org.springframework.ws.transport.http.MessageDispatcherServlet;
import org.springframework.ws.wsdl.wsdl11.SimpleWsdl11Definition;
import org.springframework.ws.wsdl.wsdl11.Wsdl11Definition;
@EnableWs
@Configuration
public class ApplicationConfig extends WsConfigurerAdapter {
@Bean
public ServletRegistrationBean dispatcherServlet(ApplicationContext applicationContext) {
MessageDispatcherServlet servlet = new MessageDispatcherServlet();
servlet.setApplicationContext(applicationContext);
servlet.setTransformWsdlLocations(true);
return new ServletRegistrationBean(servlet, "/services/*");
}
@Bean(name = "orderStatusUpdator")
public Wsdl11Definition defaultWsdl11Definition() {
SimpleWsdl11Definition wsdl11Definition = new SimpleWsdl11Definition();
wsdl11Definition.setWsdl(new ClassPathResource("vaultNotificationService.wsdl"));
return wsdl11Definition;
}
}
應用
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
System.out.println("entering application");
SpringApplication.run(Application.class, args);
}
}
在Endpoint類OrderUpdateEndpoint中,「Enetered in endpoint」語句沒有打印出來,它無法解析我相信的方法。 –
添加您的應用程序類。 –
已添加ApplicationConfig和Application類 –