我的任务是为现有的Axis2 1.5.1 Web服务创建一个Java客户端,我们一直在使用c#客户端。我们在几个位置使用字节数组,尤其是会话句柄,我遇到了创建存根的问题。
虽然wsdl2c正在创建一个webservice存根,它将byte []保持为byte [],但Java存根正在将byte []转换为DataHandler。
有没有办法改变wsdl2java的映射方式?或者我错过了一些重要的东西。
所以现在我得到byte [] - > xs:base64Binary - > DataHandler的。我想要的是byte [] - > xs:base64Binary - >字节[]
我使用-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
感谢任何帮助。