我已经按照教程https://spring.io/guides/gs/producing-web-service/ 用于创建将接收soap请求并应返回一些soap响应的应用程序。但是,教程中的名称空间只是一个示例。如何创建自己的命名空间(uri、前缀、内容?我一直在寻找,但没有成功…提前谢谢!
yjghlzjz1#
正如我在上面的评论中提到的,您应该阅读这篇文章来理解xml名称空间是什么:xml名称空间是用来做什么的?。在您的问题上下文中,它的要点是它提供了一些关于xml中元素的上下文。例如,如果您的服务遇到 <table> 元素,服务器如何知道 <table> 这是?是这个吗?是这个吗?还是这个?名称空间允许您通过添加名称空间来区分它们:
<table>
<table xmlns="urn:tabular-data:tables"> <table xmlns="urn:chemistry:periodic-table"> <table xmlns="urn:products:furniture:kitchen-table">
你可能也想看看这个问题,看看我在这里做了什么,但简而言之,我只是编出来的。我当场发明的。在你的例子中,你也可以这样做。关键是soap消息是由不同元素组成的xml。有些属于soap本身,有些属于您的应用程序,有些属于其他web服务规范,等等,您的服务需要理解它们。这就是为什么要使用名称空间,以便为元素添加意义。例如,在该页面上有以下请求:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:gs="http://spring.io/guides/gs-producing-web-service"> <soapenv:Header/> <soapenv:Body> <gs:getCountryRequest> <gs:name>Spain</gs:name> </gs:getCountryRequest> </soapenv:Body> </soapenv:Envelope>
当你说它是一个信封,你不是指任何信封,你是指一个肥皂信封。你知道它是一个soap信封,因为它的名称空间是 http://schemas.xmlsoap.org/soap/envelope/ . soap负载本身具有来自名称空间的元素 http://spring.io/guides/gs-producing-web-service .两者都是发明出来的,唯一的区别是 http://schemas.xmlsoap.org/soap/envelope/ 它被发明后,在一份文件中被标准化,这样每个人都知道它的含义。你不需要把你的标准化( http://spring.io/guides/gs-producing-web-service 也不是),你只需要创造一个独特的和特定于你的环境。人们通常使用自己的域名空间,甚至可能在其中添加一些时间戳。所以你可以用 http://jovana-vajagic.com/2021/03/20/example-service 如果你认为那是你独有的。或者你可以用 urn:uuid:8f4ac50e-574b-4936-b49b-8b129bea945b 如果你想的话(我从这里得到了随机的uuid)。所以基本上,你只需要发明一个非常独特的代码,然后在下面这个例子的代码中替换它。至于在该名称空间中定义元素,您将需要一个xml模式,在该模式中定义元素、子元素、属性及其类型等。查看下面的教程,您将看到关于xml模式的一节:
http://schemas.xmlsoap.org/soap/envelope/
http://spring.io/guides/gs-producing-web-service
http://jovana-vajagic.com/2021/03/20/example-service
urn:uuid:8f4ac50e-574b-4936-b49b-8b129bea945b
<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"> ...
您需要使用名称空间(比如 http://jovana-vajagic.com/2021/03/20/example-service 或者你选择的任何东西)并在那里声明你的元素。你将有一些阅读做:)祝你好运!
1条答案
按热度按时间yjghlzjz1#
正如我在上面的评论中提到的,您应该阅读这篇文章来理解xml名称空间是什么:xml名称空间是用来做什么的?。
在您的问题上下文中,它的要点是它提供了一些关于xml中元素的上下文。例如,如果您的服务遇到
<table>
元素,服务器如何知道<table>
这是?是这个吗?
是这个吗?
还是这个?
名称空间允许您通过添加名称空间来区分它们:
你可能也想看看这个问题,看看我在这里做了什么,但简而言之,我只是编出来的。我当场发明的。
在你的例子中,你也可以这样做。
关键是soap消息是由不同元素组成的xml。有些属于soap本身,有些属于您的应用程序,有些属于其他web服务规范,等等,您的服务需要理解它们。这就是为什么要使用名称空间,以便为元素添加意义。例如,在该页面上有以下请求:
当你说它是一个信封,你不是指任何信封,你是指一个肥皂信封。你知道它是一个soap信封,因为它的名称空间是
http://schemas.xmlsoap.org/soap/envelope/
. soap负载本身具有来自名称空间的元素http://spring.io/guides/gs-producing-web-service
.两者都是发明出来的,唯一的区别是
http://schemas.xmlsoap.org/soap/envelope/
它被发明后,在一份文件中被标准化,这样每个人都知道它的含义。你不需要把你的标准化(http://spring.io/guides/gs-producing-web-service
也不是),你只需要创造一个独特的和特定于你的环境。人们通常使用自己的域名空间,甚至可能在其中添加一些时间戳。所以你可以用
http://jovana-vajagic.com/2021/03/20/example-service
如果你认为那是你独有的。或者你可以用urn:uuid:8f4ac50e-574b-4936-b49b-8b129bea945b
如果你想的话(我从这里得到了随机的uuid)。所以基本上,你只需要发明一个非常独特的代码,然后在下面这个例子的代码中替换它。
至于在该名称空间中定义元素,您将需要一个xml模式,在该模式中定义元素、子元素、属性及其类型等。查看下面的教程,您将看到关于xml模式的一节:
您需要使用名称空间(比如
http://jovana-vajagic.com/2021/03/20/example-service
或者你选择的任何东西)并在那里声明你的元素。你将有一些阅读做:)祝你好运!