Domino Designer 8.5.2中的WSDL ArrayType

时间:2014-04-08 15:01:25

标签: web-services wsdl lotus-notes lotusscript

我正在使用WSDL文件创建下面的代码 -

Class test_n0 As ArrayType_n1 
    Public test() As test_test2_n0
    Sub NEW
End Sub

End Class
Class  As test_test2_n0 

Public t1 As StringType_n1
Public t2 As StringType_n1
Public t3 As StringType_n1

Sub NEW
End Sub

End Class

我无法在Lotus脚本中处理ArrayType。有人可以帮助我。

示例WSDL - 我无法复制整个..但它看起来像下面

 <xs:complexType name="SDDBComputer2InstanceType">
 <xs:sequence>
 <xs:element name="test" type="cmn:StringType" nillable="true" minOccurs="0"/>
 <xs:element name="test.hba" minOccurs="0">
 <xs:complexType>
 <xs:complexContent>
 <xs:extension base="cmn:ArrayType">
 <xs:sequence>
 <xs:element name="test.hba" minOccurs="0" maxOccurs="unbounded">
 <xs:complexType>
 <xs:complexContent>
 <xs:extension base="cmn:StructureType">
 <xs:sequence>
 <xs:element name="t1" type="cmn:StringType" nillable="true" minOccurs="0"/>
 <xs:element name="t2" type="cmn:StringType" nillable="true" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>

命名空间详细信息。

<definitions 
xsi:schemaLocation="http://schemas.xmlsoap.org/wsdl/http://schemas.xmlsoap.org/wsdl/" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
xmlns:ns="http://schemas.hp.com/SM/7" 
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" 
xmlns:http="http://schemas.xmlsoap.org/wsdl/http/">

我无法在lotusscript中处理数组。 Lotus脚本代码如下 -

  Dim testSome_Sub As New test_n0 
  Dim testsome2_Sub As New test_test2_n0
  testsome2_Sub.t1.Value = "some value"
  testsome2_Sub.t2.Value = "some value"
  testsome2_Sub.t3.Value = "some value"
  Set testSome_Sub.test(0) = testsome2_Sub 

//这是我遇到问题的地方,因为我将一个结构元素分配给数组。

2 个答案:

答案 0 :(得分:1)

最后解决了。感谢@Simon提供的所有指导和帮助。

我在lotuscript代码中做了一些解决方法来重新声明这里声明的数组并且它有效。 启动Web服务并声明Web服务的所有其他元素后,我再次使用 -

声明了数组test()
Redim test(10) as test_test2_n0

现在我可以在上面声明的数组中分配test_test2_n0(结构类型)的元素。

所以我的最终代码在这里 -

Web服务使用者 - 使用WSDL创建的注释 -

Class test_n0 As ArrayType_n1
Public test() As test_test2_n0
Sub NEW
End Sub
 End Class

Class test_test2_n0 As StructureType_n1

Public t1 As StringType_n1
Public t2 As StringType_n1
Public t3 As StringType_n1
Sub NEW
End Sub
End Class

Notes代理中的示例代码 -

Dim testStruct_Sub As New test_test2_n0
Dim testArray_Sub As New test_n0
Redim test(10) as test_test2_n0
Set testStruct_Sub.t1= "Some Value"
Set testStruct_Sub.t2= "Some Value"
Set testStruct_Sub.t3= "Some Value"
Set testArray_Sub.test(0) = testStruct_Sub

我的学习 -

  1. 如果在lotussript代码中未识别出任何类型,请使用兼容类型类重新声明该变量。
  2. 如果在使用者中有两个使用相同名称创建的类(一个使用StructureType,另一个使用ArrayType),则必须重新设计模式,使其只有单个结构数组。
  3. 我花了很多时间来理解第二点,我发现Notes有局限性。

答案 1 :(得分:0)

您的命名空间看起来不对。我怀疑你删除了那些你无法发帖的内容。

据我所知,问题在于这条线?

<xs:extension base="cmn:ArrayType">

创建此类:

Class test_n0 As ArrayType_n1 
    Public test() As test_test2_n0
    Sub NEW
    End Sub
End Class

如果是这种情况,您需要检查cmn的架构。这将在DEFINITIONS标记中的名称空间中引用,在LS代码中引用为:

const n1 = "URL to Schema"

拥有该架构后,您需要了解它的结构。基于你的LS代码,它将是

的一种方法
Public test() As test_test2_n0

test_test2将在n0架构中引用。您还需要检查。目前代码片段看起来有效,但我无法确认没有完整的WSDL / XSD文件(不是默认文件)。

除此之外,其他一些事情要检查。

  1. 将WSDL作为提供者导入Designer客户端。有时候如果有什么东西它不喜欢它会给出更具描述性的信息。

  2. 将WSDL作为Java使用者导入,并比较创建的对象与LotusScript,以查看不同之处(假设它作为Java导入)。

  3. LotusScript对命名方法/变量有36个字符的限制。但我没有看到证据证明这是你的片段中的一个问题。

  4. 当Java是LotusScript时,LotusScript不区分大小写。所以你最终可以得到重复的引用。

  5. LotusScript + WSDL不会检查彼此保留的关键字(例如,文本,文件,备注文档)。如果您有其中一个,则可能导致导入问题。