我有一个xsd架构,我在Cart对象中添加了一个新字段owner_email。当我将Cart Object发送到其他系统(作为json请求)或返回Cart对象作为响应(作为json)我想要传递owner_email字段时,我希望在我们的应用程序中。我可以为owner_email字段设置任何属性吗?
<xs:complexType name="Cart">
<xs:sequence>
<xs:element name="id" type="xs:string" minOccurs="0" maxOccurs="1" />
<xs:element name="name" type="xs:string" minOccurs="0" maxOccurs="1" />
<xs:element name="owner_id" type="xs:string" minOccurs="0" maxOccurs="1" />
<xs:element name="owner_email" type="xs:string" minOccurs="0" maxOccurs="1" />
</xs:sequence>
</xs:complexType>
这里我没有编辑生成的java代码。我需要修改xsd文件本身。我应该在xsd中使用什么属性来指定相同的属性。
答案 0 :(得分:1)
我有办法让它发挥作用,但有2&#34;陷阱&#34;我不是很满意。
首先,将xsd更改为:
def process_url(url) do
endpoint = Application.get_env(...)
if String.starts_with?(url, endpoint), do: url, else: endpoint <> url
end
然后你可以创建绑定文件来生成其他用户提到的瞬态注释:
<xs:element name="Cart">
<xs:complexType>
<xs:all>
<xs:element name="id" type="xs:string" minOccurs="0" maxOccurs="1" />
<xs:element name="name" type="xs:string" minOccurs="0" maxOccurs="1" />
<xs:element name="owner_id" type="xs:string" minOccurs="0" maxOccurs="1" />
<xs:element name="ownerEmail" type="xs:string" minOccurs="0" maxOccurs="1" />
</xs:all>
</xs:complexType>
</xs:element>
这将在编组以下xml时生成:
<jxb:bindings
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:annox="http://annox.dev.java.net"
xsi:schemaLocation="http://java.sun.com/xml/ns/jaxb http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd"
jxb:extensionBindingPrefixes="xjc annox" version="2.1">
<jxb:bindings schemaLocation="../xsd/cart.xsd">
<jxb:bindings node="//xs:element[@name='Cart']//xs:complexType//xs:all//xs:element[@name='ownerEmail']">
<annox:annotate target="field">
<annox:annotate annox:class="javax.xml.bind.annotation.XmlTransient" />
</annox:annotate>
</jxb:bindings>
</jxb:bindings>
</jxb:bindings>
陷阱:
重命名字段&#34; owner_email&#34;到&#34; ownerEmail&#34;因为第一个版本 将生成(以及瞬态)@XmlElement与 owner_email名称,并根据命名约定包含该字段。
我会试着看看我是否可以找到这些方法,但是现在也许这会有所帮助。干杯!