当前位置: 首页 > 知识库问答 >
问题:

JAXB——如何仅在子标记中设置xmlns和前缀

佴涵蓄
2023-03-14

我正在使用JAXB来生成一个肥皂xml请求。我想要的当前xml输出是这个

<soapenv:Envelope 
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:rgw="http:/blablablablabla.org" 
xmlns:typ="http://blablablablabla.org/bla/bla">

<soapenv:Header>

  <wsse:Security 
  soapenv:mustUnderstand="1" 
  xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" 
  xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">

       <wsse:UsernameToken wsu:Id="testToken-13">
        <wsse:Username>blbalbalL</wsse:Username>
        <wsse:Password 
        Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">1234r</wsse:Password>
     </wsse:UsernameToken>
  </wsse:Security>
 </soapenv:Header>
<soapenv:Body>
</soapenv:Body>
</soapenv:Envelope>

到目前为止,我已经生成了信封和标题标签,但我有安全标签的问题。

我的问题是,如果我尝试将xmlns设置为package-info.class前缀是正确的,但是xmlns:wsse=“blbalbla”xmlns:wsu=“http://balbla.com”转到根元素(信封)而不是安全标记。这是我得到的输出:

<soapenv:Envelope 
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:rgw="http://gr/gsis/rgwsalldata/RgWsAllData.wsdl" 
xmlns:typ="http://gr/gsis/rgwsalldata/RgWsAllData.wsdl/types/" 
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" 
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<soapenv:Header>
    <wsse:Security/>
</soapenv:Header>
<soapenv:Body/>

正如您在所需的 xml 输出中看到的,xmlns:wssexmlns:wsu 命名空间位于安全标记处。如何才能将这些xmlns添加到安全标签?以及用户名标记应该如何构建?

package-info.class

@XmlSchema(
    namespace = "http://schemas.xmlsoap.org/soap/envelope/",
    xmlns = { @XmlNs(prefix="soapenv", namespaceURI="http://schemas.xmlsoap.org/soap/envelope/"),
              @XmlNs(prefix="rgw", namespaceURI="http://blabalbalbal.org"),
              @XmlNs(prefix="typ", namespaceURI="blablaba/types/"),
              @XmlNs(prefix="wsse", namespaceURI="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"),
              @XmlNs(prefix="wsu", namespaceURI="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd")},
    elementFormDefault = XmlNsForm.QUALIFIED)

package broker.jaxb.xmlrequest;

import javax.xml.bind.annotation.*;

共有1个答案

钱锦
2023-03-14

您可以使用@XmlType(命名空间=”http://docs.oasis-open.org/wss“”或XMLRoot),而不是在包信息中声明名称空间,它应该将名称空间降到安全标签。

正如评论中提到的,两个文档都是等效的xml,所以首先测试肥皂消息是否正常工作。如果另一方也可以阅读这个,则没有必要复制确切的格式(任何像样的现代WS框架都可以)。

 类似资料:
  • 我有一些Java类扩展了一个公共超类。我想用JAXB对它们进行封送/解封,而不会在XML表示中看到超类标记。包含超类的模块不知道当前上下文中可用的子类。 以下是我试图做的事情和我的方法的最小例子: 示例XML: 这应该是一个等效的 Java 表示形式,其中具有类型的成员,该成员是实例的父: 我主要关心的是从XML表示到Java对象。请注意,我明确不想在XML文件中编写超类标记,因此类似于

  • 问题内容: 我想在React Native的MapView上设置一个标记,但是我无法通过MapView的官方文档找到任何信息。 如果不允许这样做,如何在React Native中使用现有的react模块,例如react-googlemaps? 问题答案: 您可以使用道具设置标记。 例如:

  • 我注释了setIntTag(String),但Jaxb marchaller调用setIntTag(Integer)并将Integer传递给它,如果我删除setIntTag(Integer),marchaller调用字符串setter。 如何注释这些方法以保留两个setter,并告诉编组程序使用字符串setter?

  • 我正在尝试使用 accessToken 和 refreshToken 实现 JWT 授权。访问令牌和刷新令牌都需要在仅限HTTP的cookie中设置。 我尝试了这段代码,但它没有设置cookie。我在这里使用NestJS框架。 res.send()方法运行良好,我正在获取数据作为响应。如何在此处设置cookie? 这是我的主要内容。ts文件:- 为了获得我正在使用的cookie:-

  • 我将tinymce编辑器的内容保存在MySQL表中,并希望将从数据库中检索到的相同内容粘贴回编辑器中。 我使用html实体()函数对输入进行编码,并将其保存到数据库中然后在显示内容之前使用html_entity_decode()解码内容。 我面临两个问题: 如何将此内容显示为html,而不仅仅是文本? 我还想用从数据库中检索到的值设置tinyEditor的内容。这段代码片段做到了这一点(取自小博客

  • log4j2配置的筛选器部分可能与下面的示例类似,但NoMarkerFilter语句应该捕获未设置标记的情况。