我正在查看我正在开发的Web服务的SOAP输出,我发现了一些好奇的东西:

<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
   <soapenv:Body>
      <ns1:CreateEntityTypesResponse xmlns:ns1="http://somedomain.com/wsinterface">
         <newKeys>
            <value>1234</value>
         </newKeys>
         <newKeys>
            <value>2345</value>
         </newKeys>
         <newKeys>
            <value>3456</value>
         </newKeys>
         <newKeys xsi:nil="1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
         <newKeys xsi:nil="1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
         <errors>Error1</errors>
         <errors>Error2</errors>
      </ns1:CreateEntityTypesResponse>
   </soapenv:Body>
</soapenv:Envelope>

我有两个newKeys元素是nil,两个元素都插入了xsi的命名空间引用。 我想在soapenv:Envelope元素中包含该命名空间,以便命名空间引用只发送一次。

我使用WSDL2Java生成服务框架,因此我无法直接访问Axis2 API。

===============>>#1 票数:7

使用WSDL2Java

如果您已经使用了Axis2 WSDL2Java工具,那么您将会遇到它为您生成的内容。 但是,您可以尝试更改此部分中的骨架:

   // create SOAP envelope with that payload
   org.apache.axiom.soap.SOAPEnvelope env = null;
   env = toEnvelope(
       getFactory(_operationClient.getOptions().getSoapVersionURI()),
       methodName,
       optimizeContent(new javax.xml.namespace.QName
       ("http://tempuri.org/","methodName")));

//adding SOAP soap_headers
_serviceClient.addHeadersToEnvelope(env);

要将命名空间添加到信封,请在其中的某处添加以下行:

OMNamespace xsi = getFactory(_operationClient.getOptions().getSoapVersionURI()).
    createOMNamespace("http://www.w3.org/2001/XMLSchema-instance", "xsi");

env.declareNamespace(xsi);

手工编码

如果您对该服务进行“手动编码”,您可能会执行以下操作:

SOAPFactory fac = OMAbstractFactory.getSOAP11Factory();   
SOAPEnvelope envelope = fac.getDefaultEnvelope();
OMNamespace xsi = fac.createOMNamespace("http://www.w3.org/2001/XMLSchema-instance", "xsi");

envelope.declareNamespace(xsi);
OMNamespace methodNs = fac.createOMNamespace("http://somedomain.com/wsinterface", "ns1");

OMElement method = fac.createOMElement("CreateEntityTypesResponse", methodNs);

//add the newkeys and errors as OMElements here...

在aar公开服务

如果要在aar中创建服务,则可能会影响使用目标命名空间或模式命名空间属性生成的SOAP消息(请参阅此文章 )。

希望有所帮助。

===============>>#2 票数:1

其他选项是变量MY_QNAME的前缀为空。

public static final QName MY_QNAME = new QName("http://www.hello.com/Service/",
            "tagname",
            "prefix");

所以,如果你填写它,那么它的工作原理。

  ask by user13224 translate from so

未解决问题?本站智能推荐:

1回复

Apache axis2 wsdl2java异常:未知协议:d

我正在尝试使用axis2 wsdl2java转换器从wsdl创建Java文件。 问题是我不断收到这个奇怪的异常,我无法真正解释。 目前,我正在使用Wikipedia中的示例代码进行测试。 基本上我这样调用程序 每当我得到这个例外 有谁知道这可能是什么原因? 编
1回复

设置axis2 soap服务器

我正在尝试创建一个简单的SOAP Web服务(计算器)以学习该技术的基础。 我是SOAP的新手,所以我已经做过一些事情,但是不确定下一步要做什么。 我选择了一种自上而下的方法,这意味着首先创建一个wdsl文件,然后自动生成代码。 我已经使用服务描述创建了一个wsdl文件,并使用它来生成
1回复

向xml中添加元素-断开axis2存根

我们有一个合作伙伴来托管我们使用的服务。 我们通常使用Axis2生成代理/存根类。 问题是,只要他们向wsdl添加新元素,我们就会收到AxisFault: org.apache.axis2.AxisFault:org.apache.axis2.databinding.ADBExcept
1回复

如何转换为SOAP 1.1创建的WSDL文件以支持SOAP 1.2

多年前,我根据给出的WSDL构建了SOAP 1.1服务。 这是相当基本的:我执行了Axis的WSDL2Java,并使用生成的类作为基础。 现在,我被告知要迁移此服务,以便人们可以使用SOAP 1.2来访问它。 我应该在WSDL文件中进行哪些更改,以便新生成的服务(仍使用Axis的W
2回复

Java-发送SOAP标头(用于身份验证)

我已经从wsdl文件中生成了一些Java代码,请求本身似乎正在运行,但是我无法发送凭据。 我已经使用名为“ SoapUI”的工具测试了Web服务,并且一切似乎都像个魅力一样。 这是(工作中的)xml的示例: 这是我的尝试: 错误: 大多数代码是由wsdl2ja
1回复

Eclipse在哪里保存WSDL文件?

我将Eclipse和Axis2用于SOAP WS。 当我们从POJO(自下而上)创建WebService时,WSDL文件在Eclipse项目中的放置位置在哪里? 我可以在浏览器/PROJECT/services/WEBSERVICE?wsdl获得它,但是我想在发送之前自定义其中的内容
1回复

在Axis2中创建WSDL2JAVA时发生异常

我试图在命令提示符下从WSDL文件创建Java存根。 这是将WSDL转换为Java存根文件的命令: 但是我遇到了这种异常,我不知道如何解决。 谁能帮助我找出解决该错误的方法? 线程“主”中的异常org.apache.axis2.wsdl.codegen.CodeGenera
2回复

Axis2(战争)+ Tomcat 6:缺少WSDL2Java吗?

我正在尝试学习如何使用Axis2和Tomcat来实现Web服务,但是恐怕我没有掌握一些基础知识。 我正在遵循本教程,但是当我尝试使用WSDL2Java时,我注意到我在任何地方都没有该工具。 发生这种情况的原因是我下载并安装了Axis2的.war(网络存档)版本,对吗? 如何在Tom
2回复

Axis1与Axis2客户端的非常非常简单的服务会引发意外的子元素异常

我正在将Webesrvice客户端从Axis迁移到Axis2-1.6.1,但是服务本身不会被更改。 我遇到了WDSL2Java生成的代码的问题,因为我遇到了“意外的子元素”异常。 WDSL非常简单,因为只有一项服务,并且它仅接收一个String并返回一个Date: 我已经使用以下选项
2回复

使用axis2和java2wdsl在所有节点中重复命名空间

我使用eclipse和axis2 1.4.1 facet生成一个web服务。 我的问题是在生成过程中,命名空间在所有节点中重复。 如下所示,重复ns4而不是在NewOperationResponse节点中声明。 如何使java2wdsl(或eclipse)自动生成(仅在父节点或顶级节点