是否有办法获取复杂WSDL(复杂类型)的所有输入请求参数和输出请求参数,如下所示。我可以生成SOAP请求,但我无法获取参数类型。有人可以帮忙吗?
import java.io.IOException;
import java.util.Map;
import org.apache.xmlbeans.XmlException;
import com.eviware.soapui.impl.WsdlInterfaceFactory;
import com.eviware.soapui.impl.wsdl.WsdlInterface;
import com.eviware.soapui.impl.wsdl.WsdlOperation;
import com.eviware.soapui.impl.wsdl.WsdlProject;
import com.eviware.soapui.impl.wsdl.WsdlRequest;
import com.eviware.soapui.model.iface.Operation;
import com.eviware.soapui.model.iface.Request.SubmitException;
import com.eviware.soapui.support.SoapUIException;
public class TestWsdl {
public static void main(String[] args) throws XmlException, IOException, SoapUIException, SubmitException {
try {
String wsdl = "https://secure.echosign.com/services/EchoSignDocumentService19?wsdl";
WsdlProject project = new WsdlProject();
WsdlInterface iface = WsdlInterfaceFactory.importWsdl(project, wsdl, true)[0];
Map<String, Operation> m = iface.getOperations();
for (Map.Entry<?, ?> entry : m.entrySet()) {
WsdlOperation operation = (WsdlOperation) entry.getValue();
WsdlRequest request = operation.addNewRequest("My request");
request.setTimeout("2000");
String requestContent = operation.createRequest(true);
request.setRequestContent(requestContent);
if("createUser".equalsIgnoreCase(operation.getBindingOperationName())){
System.out.println("REQUEST: " + requestContent +"\n\n");
}
}
System.exit(0);
} catch (Exception ex) {
}
}
}
SOAP响应:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:api="http://api.echosign" xmlns:dto="http://dto.api.echosign">
<soapenv:Header/>
<soapenv:Body>
<api:createUser>
<api:apiKey>?</api:apiKey>
<api:userInfo>
<!--Optional:-->
<dto:company>?</dto:company>
<!--Optional:-->
<dto:customField1>?</dto:customField1>
<!--Optional:-->
<dto:customField2>?</dto:customField2>
<!--Optional:-->
<dto:customField3>?</dto:customField3>
<!--Optional:-->
<dto:email>?</dto:email>
<!--Optional:-->
<dto:firstName>?</dto:firstName>
<!--Optional:-->
<dto:groupKey>?</dto:groupKey>
<!--Optional:-->
<dto:lastName>?</dto:lastName>
<!--Optional:-->
<dto:optIn>?</dto:optIn>
<!--Optional:-->
<dto:password>?</dto:password>
<!--Optional:-->
<dto:phone>?</dto:phone>
<!--Optional:-->
<dto:title>?</dto:title>
</api:userInfo>
</api:createUser>
</soapenv:Body>
</soapenv:Envelope>
答案 0 :(得分:0)
我认为wsdl
应该包含内联xml schema
或引用外部xml架构。
您可以使用jaxb
,xmlbeans
等为同一个xml架构创建java类,无论您喜欢什么。
然后,您可以轻松地使用数据类型创建请求。
当然,上面的请求会以您的请求类型的对象形式出现,一旦添加了soap标题,就会将其序列化为字符串。
希望这有帮助。