如何使用spring-ws發(fā)布webservice服務
spring-ws
添加依賴、插件
在pom.xml添加
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web-services</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.ws</groupId>
<artifactId>spring-ws-core</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/wsdl4j/wsdl4j -->
<dependency>
<groupId>wsdl4j</groupId>
<artifactId>wsdl4j</artifactId>
<version>1.6.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.xml.bind/jaxb-api -->
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency><!-- 要用的時候把下面插件打開, 不用了記得注釋-->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<id>xjc</id>
<goals>
<goal>xjc</goal>
</goals>
</execution>
</executions>
<configuration>
<sources>
<source>${project.basedir}/src/main/resources/xsd/fakeBindUrl.xsd</source>
</sources>
</configuration>
</plugin>創(chuàng)建XSD文件
對比實際輸入輸出參考修改xsd
實際輸入、輸出 輸入
<?xml version='1.0' encoding='UTF-8'?> <soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:snr="snr"> <soapenv:Header/> <soapenv:Body> <snr:bindRequest soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <RequestInfo xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"> <Root> <Domain>host</Domain> <Passwd>pasdasjidojoi</Passwd> <SrvCode>489489489445645648</SrvCode> <Content> <![CDATA[<?xml version='1.0' encoding='UTF-8'?><FakePassQuery><FakeCode>admin</FakeCode><Password><![CDATA[dsaiodas54545]]]]><![CDATA[></Password><FakeType>1000</FakeType></FakePassQuery>]]> </Content> </Root> </RequestInfo></snr:bindRequest></soapenv:Body></soapenv:Envelope>
輸出
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<FakePassQueryResponse>
<ExchangeId>a79bc02ea21a4a13a7c58108cc864a9d</ExchangeId>
<ErrorCode>00000</ErrorCode>
<IsSuccess>T</IsSuccess>
<FakeContent>
<FakeId>1</FakeId>
<FakeCode>admin</FakeCode>
<StaffName>admin</StaffName>
<OrgId/>
<EffDate>2024-01-01 00:00:00</EffDate>
<ExpDate>2125-01-08 13:28:52</ExpDate>
<StatusCd>0</StatusCd>
<ContactTel/>
<SmsTel/>
</FakeContent>
</FakePassQueryResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>xsd
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://spring.io/guides/gs-producing-web-service"
targetNamespace="http://spring.io/guides/gs-producing-web-service" elementFormDefault="qualified">
<xs:element name="bindRequest">
<xs:complexType>
<xs:sequence>
<xs:element name="RequestInfo" type="tns:RequestInfo"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="RequestInfo">
<xs:sequence>
<xs:element name="Root" type="tns:Root"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Root">
<xs:sequence>
<xs:element name="Domain" type="xs:string"/>
<xs:element name="Passwd" type="xs:string"/>
<xs:element name="SrvCode" type="xs:string"/>
<xs:element name="Content" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="FakePassQuery">
<xs:sequence>
<xs:element name="FakeCode" type="xs:string"/>
<xs:element name="Password" type="xs:string"/>
<xs:element name="FakeType" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:element name="FakePassQueryResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="ErrorInfo" type="xs:string"/>
<xs:element name="ResultCode" type="xs:string"/>
<xs:element name="ExchangeId" type="xs:string"/>
<xs:element name="ErrorCode" type="xs:string"/>
<xs:element name="IsSuccess" type="xs:string"/>
<xs:element name="FakeContent" type="tns:FakeContent"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="FakeContent">
<xs:sequence>
<xs:element name="FakeId" type="xs:string"/>
<xs:element name="FakeCode" type="xs:string"/>
<xs:element name="StaffName" type="xs:string"/>
<xs:element name="OrgId" type="xs:string"/>
<xs:element name="EffDate" type="xs:string"/>
<xs:element name="ExpDate" type="xs:string"/>
<xs:element name="StatusCd" type="xs:string"/>
<xs:element name="ContactTel" type="xs:string"/>
<xs:element name="SmsTel" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>生成xsd實體
idea -> maven -> 插件 -> jaxb2 -> jaxb2:xjc
生成的文件在:target\generated-sources\jaxb
配置
@EnableWs
@Configuration
public class WebServiceConfig extends WsConfigurerAdapter {
@Bean
public ServletRegistrationBean<MessageDispatcherServlet> messageDispatcherServlet(ApplicationContext applicationContext) {
MessageDispatcherServlet servlet = new MessageDispatcherServlet();
servlet.setApplicationContext(applicationContext);
servlet.setTransformWsdlLocations(true);
return new ServletRegistrationBean<>(servlet, "/ws/*");
}
// 這里的BeanName就是實際訪問路徑,當前服務請求路徑: ip:port/ws/fakeBindUrl
@Bean(name = "fakeBindUrl")
public DefaultWsdl11Definition defaultWsdl11Definition(XsdSchema subAcctInfoForSelfBindSchema) {
DefaultWsdl11Definition wsdl11Definition = new DefaultWsdl11Definition();
wsdl11Definition.setPortTypeName("CountriesPort");
wsdl11Definition.setLocationUri("/ws");
wsdl11Definition.setTargetNamespace("snr");
wsdl11Definition.setSchema(subAcctInfoForSelfBindSchema);
return wsdl11Definition;
}
@Bean
public XsdSchema subAcctInfoForSelfBindSchema() {
return new SimpleXsdSchema(new ClassPathResource("xsd/fakeBindUrl.xsd"));
}
// 多個webservice服務,則注冊多個wsdl11Definition、XsdSchema
// 這里的BeanName就是實際訪問路徑,當前這個就是/ws/fakeBindUrl2
// @Bean(name = "fakeBindUrl2")
// public DefaultWsdl11Definition defaultWsdl11Definition2(XsdSchema subAcctInfoForSelfBindSchema2) {
// DefaultWsdl11Definition wsdl11Definition = new DefaultWsdl11Definition();
// wsdl11Definition.setPortTypeName("CountriesPort");
// wsdl11Definition.setLocationUri("/ws");
// wsdl11Definition.setTargetNamespace("snr");
// wsdl11Definition.setSchema(subAcctInfoForSelfBindSchema);
// return wsdl11Definition;
// }
// @Bean
// public XsdSchema subAcctInfoForSelfBindSchema2() {
// return new SimpleXsdSchema(new ClassPathResource("xsd/fakeBindUrl.xsd"));
// }
}定義Endpoint
@Endpoint
@Slf4j
public class bindRequestEndpoint {
private static final String NAMESPACE_URI = "snr";
@Autowired
private SubAcctBindingService subAcctBindingService;
@PayloadRoot(namespace = NAMESPACE_URI, localPart = "bindRequest")
@ResponsePayload
public FakePassQueryResponse fakeBindUrl(@RequestPayload bindRequest requestInfo) {
try {
log.info("收到請求: {}", requestInfo);
// 解析requestInfo的XML內容進行業(yè)務處理
FakePassQuery FakePassQuery = parseInnerXML(requestInfo.getRequestInfo().getRoot().getContent());
FakePassQueryResponse result = subAcctBindingService.processBindRequest(FakePassQuery);
return result;
} catch (Exception e) {
log.error("處理請求時發(fā)生異常: ", e);
// 組裝錯誤響應
FakePassQueryResponse response = new FakePassQueryResponse();
response.setErrorInfo(e.getMessage());
response.setResultCode("-1");
response.setIsSuccess("F");
return response;
}
}
}啟動服務
當前服務的ip端口號ip:port/ws/fakeBindUrl?wsdl
其他
如遇報錯可以在入?yún)⒅袊L試加入namespace
@XmlRootElement(namespace="", ...)
1 counts of IllegalAnnotationExceptions
入?yún)⒒虺鰠⒍x有問題@XmlType的propOrder與實際屬性不符等等
到此這篇關于使用spring-ws發(fā)布webservice服務的文章就介紹到這了,更多相關Spring AI Alibaba百煉平臺大模型內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
一文秒懂IDEA中每天都在用的Project Structure知識
這篇文章主要介紹了一文秒懂IDEA中每天都在用的Project Structure知識,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-10-10
Spring Boot集成ShedLock分布式定時任務的實現(xiàn)示例
ShedLock確保您計劃的任務最多同時執(zhí)行一次。如果一個任務正在一個節(jié)點上執(zhí)行,則它會獲得一個鎖,該鎖將阻止從另一個節(jié)點(或線程)執(zhí)行同一任務。2021-05-05
Java實現(xiàn)經典游戲Flappy Bird的示例代碼
Flappy?Bird是13年紅極一時的小游戲,即摁上鍵控制鳥的位置穿過管道間的縫隙。本文將用Java語言實現(xiàn)這一經典的游戲,需要的可以參考一下2022-02-02
使用stream的Collectors.toMap()方法常見的問題及解決
這篇文章主要介紹了使用stream的Collectors.toMap()方法常見的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03
nas實現(xiàn)java開發(fā)的環(huán)境詳解
這篇文章主要為大家介紹了nas實現(xiàn)java開發(fā)的環(huán)境詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-11-11

