我的任务是为我们一直在使用 ac# 客户端使用的现有 Axis2 1.5.1 Web 服务制作 Java 客户端。我们在几个位置使用字节数组,尤其是会话句柄,我在创建存根时遇到了问题。
当 wsdl2c 创建一个将 byte[] 保持为 byte[] 的 web 服务存根时,Java 存根正在将 byte[] 转换为 DataHandler。
有没有办法改变 wsdl2java 的映射方式?或者我在这里错过了什么重要的东西。
所以现在我得到 byte[] -> xs:base64Binary -> DataHandler。我想要的是 byte[] -> xs:base64Binary -> byte[]
我使用 -uw 和 -or 参数使用 wsdl2java 生成了存根。
wsdl2java -uri http://mycomputer:myport/my-webservices/services/TheServices?wsdl -uw -or
原来的java方法是这样的
public byte[] newSession(byte[] domainenc, byte[] userenc, byte[] passenc) throws SOAPException {
wsdl如下
<xs:element name="newSession">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="domainenc" nillable="true" type="xs:base64Binary"/>
<xs:element minOccurs="0" name="userenc" nillable="true" type="xs:base64Binary"/>
<xs:element minOccurs="0" name="passenc" nillable="true" type="xs:base64Binary"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="newSessionResponse">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="return" nillable="true" type="xs:base64Binary"/>
</xs:sequence>
</xs:complexType>
</xs:element>
对于 C# 客户端 wsdl2C 携带参数并以 byte[] 形式返回类型,这就是我想要的
[return: System.Xml.Serialization.XmlElementAttribute("return", DataType="base64Binary", IsNullable=true)]
public byte[] newSession([System.Xml.Serialization.XmlElementAttribute(DataType="base64Binary", IsNullable=true)] byte[] domainenc, [System.Xml.Serialization.XmlElementAttribute(DataType="base64Binary", IsNullable=true)] byte[] userenc, [System.Xml.Serialization.XmlElementAttribute(DataType="base64Binary", IsNullable=true)] byte[] passenc) {
object[] results = this.Invoke("newSession", new object[] {
domainenc,
userenc,
passenc});
return ((byte[])(results[0]));
}
然而,使用 wsdl2java 它将 base64binary 转换为数据处理程序。
public javax.activation.DataHandler newSession(javax.activation.DataHandler domainenc18,javax.activation.DataHandler userenc19,javax.activation.DataHandler passenc20) throws java.rmi.RemoteException
任何帮助表示赞赏。