Describing a string array in a wsdl file

后端 未结 3 1392
孤独总比滥情好
孤独总比滥情好 2021-01-05 22:57

I\'m using the globus toolkit for a project. In my service i have a resource: a string array. I want to get this resource from an Android client. How can I do that? How can

相关标签:
3条回答
  • 2021-01-05 23:22

    I guess you're looking for this

    <complexType name='ArrayOfString'>
        <sequence>
            <element name='item' type='xsd:string' maxOccurs='unbounded'/>
        </sequence>
    </complexType>
    

    Source: http://www.activebpel.org/samples/samples-2/BPEL_Samples/Resources/Docs/arrays.html

    UPDATE:

    I've done a test using NetBeans 7.0.1. The results were this:

    Declare a method that receives a String[] parameter:

    @WebMethod(operationName = "helloArray")
    public String helloArray(@WebParam(name = "name") String[] name) {
        StringBuilder sb = new StringBuilder("Hello ");
        if (name != null) {
            for(int i = 0; i < name.length; i++) {
                sb.append(name[i]);
                if (i < (name.length - 1)) {
                    sb.append(" and ");
                }
            }
        }
        sb.append('!');
        return sb.toString();
    }
    

    The WSDL generated a complex type for my method with a String array element

    <xs:complexType name="helloArray">
        <xs:sequence>
            <xs:element name="name" type="xs:string" nillable="true" minOccurs="0" 
                maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    

    In the client, the IDE generated a List<String> to consume it:

    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(name = "helloArray", propOrder = {"name"})
    public class HelloArray {
    
        @XmlElement(nillable = true)
        protected List<String> name;
    
        public List<String> getName() {
            if (name == null) {
                name = new ArrayList<String>();
            }
            return this.name;
        }
    }
    

    And a method to consume the service

    private String helloArray(java.util.List<java.lang.String> name) {
        edu.home.wsclient.HelloWorldWS port = service.getHelloWorldWSPort();
        return port.helloArray(name);
    }
    

    I've uploaded both projects in this address

    0 讨论(0)
  • 2021-01-05 23:23

    You can use a custom type which has a String element (and more data, if you'd like) with multiplicity > 1.

    <xsd:sequence>
      <xsd:element name="YourClass" type="pre:YourClass" maxOccurs="unbounded" minOccurs="0">
      </xsd:element>
    </xsd:sequence>
    
    0 讨论(0)
  • 2021-01-05 23:25

    Have the XML call out a parent tag with multiple children, each with one string value from your array:

    <parent>
        <child>String 1</child>
        <child>String 2</child>
    </parent>
    

    Name the tags appropriately.

    0 讨论(0)
提交回复
热议问题