输入参数复杂WSDL的名称和类型

时间:2016-03-22 10:21:59

标签: java soap wsdl soapui

是否有办法获取复杂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>

1 个答案:

答案 0 :(得分:0)

我认为wsdl应该包含内联xml schema或引用外部xml架构。

您可以使用jaxbxmlbeans等为同一个xml架构创建java类,无论您喜欢什么。

然后,您可以轻松地使用数据类型创建请求。

当然,上面的请求会以您的请求类型的对象形式出现,一旦添加了soap标题,就会将其序列化为字符串。

希望这有帮助。