Java 언어, JAX-RPC용 WSDL 및 XML 애플리케이션 사이의 맵핑
JAX-RPC(Java™ API for XML-based Remote Procedure Call) 애플리케이션용 데이터는 XML(extensible Markup Language)로서 전달됩니다. JAX-RPC 애플리케이션은 맵핑을 사용하여 Java 언어와 XML(extensible Markup Language) 기술 사이의 데이터 변환에 대해 설명합니다. 여기에는 Application Server에서 지원되는 XML 스키마, WSDL(Web Services Description Language) 및 SOAP가 포함됩니다.
JAX-RPC 애플리케이션의 경우, Java 언어와 XML 사이의 대부분의 맵핑이 JAX-RPC 스펙에 의해 지정됩니다. 선택적이거나 JAX-RPC에 지정되지 않은 일부 맵핑도 지원됩니다. API의 완전한 목록에 대한 JAX-RPC 스펙을 검토하십시오. 지원되는 표준 및 스펙의 완전한 목록은 웹 서비스 스펙 및 API 문서를 참조하십시오.
표기법
네임스페이스 접두부 | Namespace |
---|---|
xsd | http://www.w3.org/2001/XMLSchema |
xsi | http://www.w3.org/2001/XMLSchema-instance |
soapenc | http://schemas.xmlsoap.org/soap/encoding/ |
wsdl | http://schemas.xmlsoap.org/wsdl/ |
wsdlsoap | http://schemas.xmlsoap.org/wsdl/soap/ |
ns | 사용자 정의 네임스페이스 |
apache | http://xml.apache.org/xml-soap |
wasws | http://websphere.ibm.com/webservices/ |
세부사항 맵핑 정보
다음 섹션은 다음과 같은 지원되는 맵핑을 식별합니다.Java-to-WSDL 맵핑
이 섹션은 Java-to-WSDL 맵핑 규칙을 요약합니다. Java-to-WSDL 맵핑 규칙은 상향식 처리를 위한 Java2WSDL 명령에 의해 사용됩니다. 상향식 처리에서 기존 Java 서비스 구현이 웹 서비스를 정의하는 WSDL 파일을 작성하기 위해 사용됩니다. 구성된 WSDL 파일에는 다음 이유로 추가 수동 편집이 필요할 수 있습니다.- 모든 Java 클래스 및 구성에 WSDL 파일에 대한 맵핑이 있는 것은 아닙니다. 예를 들어, Java bean 스펙 규칙을 따르지 않는 Java 클래스가 WSDL 구성으로 맵핑되지 않을 수 있습니다.
- 일부 Java 클래스 및 구성에는 WSDL 파일에 대한 여러 맵핑이 있습니다. 예를 들어, java.lang.String 클래스는 xsd:string 또는 soapenc:string 구성으로 맵핑될 수 있습니다. Java2WSDL 명령은 이러한 맵핑 중 하나를 선택하지만 다른 맵핑이 요청되는 경우 WSDL 파일을 편집해야 합니다.
- WSDL 구성을 생성하기 위한 여러 방법이 존재합니다. 예를 들어, 유형 또는 요소 속성을 가진 wsdl:message에서 wsdl:part를 구성할 수 있습니다. Java2WSDL 명령은 -style 및 -use 옵션 설정을 기반으로 정보가 주어진 선택사항을 작성합니다.
- WSDL 파일은 SOAP 메시지에서 전송된 인스턴스 데이터 요소에 대해 설명합니다. 메시지에 사용되는 이름 또는 형식을 수정하려는 경우, WSDL 파일이 편집되어야 합니다. 예를 들어, Java2WSDL 명령은 XML 요소로서 Java bean 특성을 맵핑합니다. 일부 상황에서 XML 속성으로 Java bean 특성을 맵핑하기 위해 WSDL 파일을 변경하려고 할 수 있습니다.
- WSDL 파일은 헤더 또는 첨부 파일 지원이 필요한 경우 편집을 요청합니다.
- WSDL 파일은 wsdl:import 구성을 사용하는 여러 부분 WSDL 파일이 필요한 경우 편집을 요청합니다.
- 네임스페이스 맵핑에 대한 패키지:
JAX-RPC 스펙은 XML 네임스페이스에 대한 Java 패키지 이름의 기본 맵핑을 표시하지 않습니다. JAX-RPC 스펙은 각 Java 패키지가 단일 XML 네임스페이스에 맵핑해야 하는지를 지정하지 않습니다. 마찬가지로, 각 XML 네임스페이스는 단일 Java 패키지로 맵핑해야 합니다. Java 패키지의 이름을 되돌리고 http:// 접두부를 추가하여 네임스페이스를 구성하는 기본 맵핑 알고리즘이 제공됩니다. 예를 들어, com.ibm.webservice라는 패키지가 XML 네임스페이스 http://webservice.ibm.com에 맵핑됩니다.
WSDL2Java 및 Java2WSDL 명령의 -NStoPkg 및 -PkgtoNS 옵션을 사용하여 XML 네임스페이스와 Java 패키지 이름 사이의 기본 맵핑을 대체할 수 있습니다.
- ID 맵핑:
Java ID는 WSDL 및 XML ID로 직접적으로 맵핑됩니다.
Java bean 특성 이름이 XML ID로 맵핑됩니다. 예를 들어, getInfo 및 setInfo 메소드로 Java bean이 info라는 이름을 가진 XML 구성으로 맵핑됩니다.
필요한 경우, 서비스 엔드포인트 인터페이스 메소드 매개변수 이름이 WSDL 및 XML ID로 직접적으로 맵핑됩니다. 계속 학습하려면 WSDL2Java 명령 -implClass 옵션에 대한 정보를 참조하십시오.
- WSDL 구성 요약:
표 2. WSDL 또는 XML 구성에 대한 Java의 맵핑. Java 구성으로부터 관련 WSDL 및 XML 구성으로의 맵핑에 대해 설명합니다. Java 구성 WSDL 및 XML 구성 서비스 엔드포인트 인터페이스 wsdl:portType 메소드 wsdl:operation 매개변수 wsdl:input, wsdl:message, wsdl:part 리턴 wsdl:output, wsdl:message, wsdl:part 예외 처리 wsdl:fault, wsdl:message, wsdl:part 기본 유형 xsd 및 soapenc 단순 유형 Java beans xsd:complexType Java bean 특성 xsd:complexType의 중첩 xsd:elements 배열 JAX-RPC가 maxOccurs="unbounded" 속성으로 xsd:complexType 또는 xsd:element를 정의합니다. 사용자 정의 예외 xsd:complexType - 바인딩 및 서비스 구성
생성된 wsdl:portType을 따르는 wsdl:binding이 생성됩니다. 생성된 wsdl:binding을 참조하는 포트를 포함하는 wsdl:service가 생성됩니다. 바인딩 및 서비스의 이름이 Java2WSDL 명령에 의해 제어됩니다.
- 스타일 및 사용-style 및 -use 옵션을 사용하여 다른 유형의 WSDL 파일을 생성하십시오. 네 가지의 지원되는 조합은 다음과 같습니다.
- -style DOCUMENT -use LITERAL
- -style RPC -use LITERAL
- -style DOCUMENT -use LITERAL -wrapped false
- -style RPC -use ENCODED
- DOCUMENT LITERAL:
Java2WSDL 명령은 웹 서비스 - 상호 운용성(WS-I) 스펙 준수 문서 리터럴 WSDL 파일을 생성합니다. wsdl:binding은 임베디드 style="document" 및 use="literal" 속성으로 생성됩니다. xsd:element는 요청 메시지에 대해 설명하기 위해 각 서비스 엔드포인트 인터페이스 메소드에 대해 생성됩니다. 유사한 xsd:element가 응답 메시지에 대해 설명하기 위해 각 서비스 엔드포인트 인터페이스 메소드에 대해 생성됩니다.
- RPC LITERAL:
Java2WSDL 명령은 WS-I 준수 rpc 리터럴 WSDL 파일을 생성합니다. wsdl:binding은 임베디드 style="rpc" 및 use="literal" 속성으로 생성됩니다. wsdl:message 구성은 각 서비스 엔드포인트 인터페이스 메소드의 입력 및 출력에 대해 생성됩니다. 메소드의 매개변수가 wsdl:message 구성 내의 파트 요소에 의해 설명됩니다.
- DOCUMENT LITERAL은 랩핑되지 않습니다.
Java2WSDL 명령은 JAX-RPC 스펙에 따라 문서 리터럴 WSDL 파일을 생성합니다. 이 WSDL 파일은 .NET을 준수하지 않습니다. 랩핑되지 않은 DOCUMENT LITERAL과 DOCUMENT LITERAL 사이의 주요한 차이는 요청 및 응답 메시지를 정의하기 위한 wsdl:message 구성의 사용입니다.
- RPC ENCODED:
Java2WSDL 명령은 JAX-RPC 스펙에 따라 인코딩된 rpc WSDL 파일을 생성합니다. 이 WSDL 파일은 WS-I 스펙을 준수하지 않습니다. wsdl:binding은 임베디드 style="rpc" 및 use="encoded" 속성으로 생성됩니다. 특정 soapenc 맵핑이 유형 및 배열을 표시하기 위해 사용됩니다.
많은 Java 유형이 표준 XML 유형에 직접적으로 맵핑됩니다. 예를 들어, java.lang.String은 xsd:string에 맵핑됩니다. 이러한 맵핑은 JAX-RPC 스펙에서 설명됩니다.
표준 XML 유형에 직접적으로 맵핑될 수 없는 Java 유형이 wsdl:types 섹션에서 생성됩니다. Java bean 패턴과 일치하는 Java 클래스가 xsd:complexType으로 맵핑됩니다. 모든 맵핑 규칙에 대한 설명을 위한 JAX-RPC 스펙을 검토하십시오. 다음 예제는 샘플 기본에 대한 맵핑 및 파생된 Java 클래스에 대해 설명합니다.Java: public abstract class Base { public Base() {} public int a; // mapped private int b; // mapped via setter/getter private int c; // not mapped private int[] d; // mapped via indexed setter/getter public int getB() { return b;} // map property b public void setB(int b) {this.b = b;} public int[] getD() { return d;} // map indexed property d public void setD(int[] d) {this.d = d;} public int getD(int index) { return d[index];} public void setB(int index, int value) {this.d[index] = value;} public void someMethod() {...} // not mapped } public class Derived extends Base { public int x; // mapped private int y; // not mapped } Mapped to: <xsd:complexType name="Base" abstract="true"> <xsd:sequence> <xsd:element name="a" type="xsd:int"/> <xsd:element name="b" type="xsd:int"/> <xsd:element name="d" minOccurs="0" maxOccurs="unbounded" type="xsd:int"/> </xsd:sequence> </xsd:complexType> <xsd:complexType name="Derived"> <xsd:complexContent> <xsd:extension base="ns:Base"> <xsd:sequence> <xsd:element name="x" type="xsd:int"/> </xsd:sequence> </xsd:extension> </xsd:complexContent> </xsd:complexType>
- 지원되지 않는 클래스:
클래스를 XML 유형으로 맵핑할 수 없는 경우, Java2WSDL 명령이 메시지를 실행하고 xsd:anyType 참조가 WSDL 파일에 생성됩니다. 이러한 상황에서 JAX-RPC 준수 클래스를 사용하기 위해 웹 서비스 구현을 수정하십시오.
WSDL-to-Java 맵핑
WSDL2Java 명령은 WSDL 파일에 설명된 정보를 사용하여 Java 클래스를 생성합니다.
- 패키지에 대한 네임스페이스의 맵핑:
JAX-RPC는 Java 패키지 이름에 대한 XML 네임스페이스의 맵핑을 지정하지 않습니다. JAX-RPC는 각 Java 패키지가 단일 XML 네임스페이스로 맵핑된다는 것을 지정합니다. 마찬가지로, 각 XML 네임스페이스는 단일 Java 패키지로 맵핑해야 합니다. 기본 맵핑 알고리즘은 XML 네임스페이스에서 프로토콜을 생략하고 이름을 되돌립니다. 예를 들어, XML 네임스페이스 http://websphere.ibm.com은 이름 com.ibm.websphere를 가지는 Java 패키지가 됩니다.
Java 패키지에 대한 XML 네임스페이스의 기본 맵핑은 컨텍스트 루트를 무시합니다. 두 개의 네임스페이스가 첫 번째 슬래시까지 동일한 경우, 동일한 Java 패키지로 맵핑됩니다. 예를 들어, XML 네임스페이스 http://websphere.ibm.com/foo 및 http://websphere.ibm.com/bar은 com.ibm.websphere Java 패키지로 맵핑됩니다. WSDL2Java 및 Java2WSDL 명령의 -NStoPkg 및 -PkgtoNS 옵션을 사용하여 XML 네임스페이스와 Java 패키지 이름 사이의 기본 맵핑을 대체할 수 있습니다.
XML 이름은 Java ID 보다 훨씬 풍부합니다. 해당 이름은 Java ID에서 허용되지 않는 문자를 포함할 수 있습니다. XML 이름을 Java ID에 맵핑하기 위한 규칙에 대해 JAX-RPC 스펙의 부록 20을 참조하십시오.
- Java 구성 요약:다음 테이블은 Java 구성에 대한 XML을 요약합니다. 이러한 맵핑에 대한 설명은 JAX-RPC 스펙을 참조하십시오.
표 3. Java에 대한 WSDL 또는 XML 구성의 맵핑. XML 및 Java에 대한 구성 사이의 맵핑에 대해 설명합니다. WSDL 및 XML 구성 Java 구성 xsd:complexType Java bean 클래스, Java 예외 클래스 또는 Java 배열 중첩 xsd:element/xsd:attribute Java bean 특성 xsd:simpleType(열거) JAX-RPC 열거 클래스 wsdl:message 메소드 매개변수 서명은 일반적으로 wsdl:message에 의해 판별됩니다. 서비스 엔드포인트 인터페이스 메소드 서명 wsdl:portType 서비스 엔드포인트 인터페이스 wsdl:operation 서비스 엔드포인트 인터페이스 메소드 wsdl:binding 스텁 wsdl:service 서비스 인터페이스 wsdl:port 서비스 인터페이스에서 포트 액세서 메소드 - 표준 XML 유형 맵핑:
- JAX-RPC 단순 XML 유형 맵핑:
많은 XML 유형은 Java 유형으로 직접적으로 맵핑됩니다. 이러한 맵핑에 대한 설명은 JAX-RPC 스펙을 참조하십시오.
WSDL2Java 명령은 wsdl:types 섹션에서 정의되는 XML 스키마 구성에 대한 Java 유형을 생성합니다. XML 스키마 언어는 JAX-RPC 스펙에 정의된 필수 또는 선택적 서브세트보다 더 광범위합니다. WSDL2Java 명령은 JAX-RPC 스펙에 포함되지 않는 일부 XML 스키마 맵핑 뿐만 아니라 대부분의 선택적 맵핑 및 필수 맵핑을 지원합니다. WSDL2Java 명령은 지원되지 않는 일부 구성을 무시합니다. 예를 들어, 명령은 기본 속성을 지원하지 않습니다. xsd:element가 기본 속성으로 정의되면 기본 속성이 무시됩니다. 일부 경우에, 명령이 지원되지 않는 구성을 Java 인터페이스, javax.xml.soap.SOAPElement로 맵핑합니다.
표준 Java bean 맵핑이 JAX-RPC 스펙의 섹션 4.2.3에 정의됩니다. xsd:complexType은 유형을 정의합니다. xsd:sequence 또는 xsd:all 그룹 내의 중첩 xsd:elements가 Java bean 특성에 맵핑됩니다. 예를 들어 다음과 같습니다.XML: <xsd:complexType name="Sample"> <xsd:sequence> <xsd:element name="a" type="xsd:string"/> <xsd:element name="b" maxOccurs="unbounded" type="xsd:string"/> </xsd:sequence> </xsd:complexType> Java: public class Sample { // .. public Sample() {} // Bean Property a public String getA() {...} public void setA(String value) {...} // Indexed Bean Property b public String[] getB() {...} public String getB(int index) {...} public void setB(String[] values) {...} public void setB(int index, String value) {...} }
- wsdl:portType 구성의 맵핑:
wsdl:portType 구성은 서비스 엔드포인트 인터페이스로 맵핑됩니다. wsdl:portType 구성의 이름은 서비스 엔드포인트 인터페이스의 클래스 이름으로 맵핑됩니다.
- wsdl:operation 구성의 맵핑:wsdl:portType 내의 wsdl:operation 구성이 서비스 엔드포인트 인터페이스의 메소드에 맵핑됩니다. wsdl:operation의 이름은 메소드의 이름으로 맵핑됩니다. wsdl:operation에는 메시지 속성을 사용하여 요청 및 응답 wsdl:message 구성을 참조하는 wsdl:input 및 wsdl:output 요소가 포함됩니다. wsdl:operation에는 결함을 설명하는 wsdl:message를 참조하는 wsdl:fault 요소가 포함될 수 있습니다. 이러한 결함은 JAX-RPC 스펙의 섹션 4.3.6에서 논의된 것처럼 예외(java.lang.Exception)를 펼치는 Java 클래스로 맵핑됩니다.
- 문서 리터럴 랩핑된 형식의 영향:WSDL 파일이 문서 리터럴 랩핑된 형식을 사용하면 메소드 매개변수가 랩퍼 xsd:element에서 맵핑됩니다. 랩핑된 문서 리터럴 및 리터럴 형식이 WSDL2Java 명령에 의해 자동으로 발견됩니다. 다음 기준이 충족되어야 합니다.
- WSDL 파일은 해당 wsdl:binding 구성에 style="document"가 있어야 합니다.
- wsdl:binding 내에 있는 조작의 입력 및 출력 구성에는 use="literal"을 포함하는 soap:body 요소가 포함되어야 합니다.
- wsdl:operation 입력 구성에서 참조되는 wsdl:message에는 단일 파트가 있어야 합니다.
- 파트는 요소 속성을 사용하여 xsd:element를 참조해야 합니다.
- 참조된 xsd:element 또는 랩퍼 요소에는 wsdl:operation과 동일한 이름이 있어야 합니다.
- 랩퍼 요소에는 xsd:attributes를 포함하지 않아야 합니다.
WSDL: <xsd:element name="myMethod"> <xsd:complexType> <xsd:sequence> <xsd:element name="param1" type="xsd:string"/> <xsd:element name="param2" type="xsd:int"/> </xsd:sequence> </xsd:complexType> </xsd:element> ... <wsdl:message name="response"/> <part name="parameters" element="ns:myMethod"/> </wsdl:message name="response"/> <wsdl:message name="response"/> ... <wsdl:operation name="myMethod"> <input name="input" message="request"/> <output name="output" message="response"/> </wsdl:operation> Java: void myMethod(String param1, int param2) ...
- 매개변수 맵핑:
문서 및 리터럴 랩핑된 형식이 발견되지 않으면 매개변수 맵핑이 JAX-RPC 스펙의 섹션 4.3.4에서 일반 JAX-RPC 맵핑 규칙 세트를 따릅니다.
각 매개변수는 입력 및 출력 요소에서 참조된 wsdl:message 파트에 의해 정의됩니다.- 요청 wsdl:message의 wsdl:part가 입력 매개변수에 맵핑됩니다.
- 응답 wsdl:message의 wsdl:part가 리턴값에
맵핑됩니다. 여러 wsdl:parts가 응답 메시지에 존재하면
출력 매개변수에 맵핑됩니다.
- JAX-RPC 스펙의 섹션 4.3.5에서 논의된 것처럼 각 출력 매개변수에 대해 홀더 클래스가 생성됩니다.
- 요청 및 응답 wsdl:message 모두인 wsdl:part가
출력 매개변수로 맵핑됩니다.
- JAX-RPC 스펙의 섹션 4.3.5에서 논의된 것처럼 각 입력 매개변수에 대해 홀더 클래스가 생성됩니다.
- wsdl:operation parameterOrder 속성은 매개변수의 순서를 정의합니다.
XML: <wsdl:message name="request"> <part name="param1" type="xsd:string"/> <part name="param2" type="xsd:int"/> </wsdl:message name="response"/> <wsdl:message name="response"/> ... <wsdl:operation name="myMethod" parameterOrder="param1, param2"> <input name="input" message="request"/> <output name="output" message="response"/> </wsdl:operation> Java: void myMethod(String param1, int param2) ...
- 문서 리터럴 랩핑된 형식의 영향:
- wsdl:binding의 맵핑:WSDL2Java 명령은 wsdl:binding 정보를 사용하여 구현 특정 클라이언트 측 스텁을 생성합니다. WebSphere® Application Server는 서버 측에서 wsdl:binding 정보를 사용하여 요청을 적절하게 직렬화 해제하고 웹 서비스를 호출하며 응답을 직렬화합니다. wsdl:binding의 정보는 문서 및 리터럴 랩핑된 형식이 사용될 때 또는 MIME 첨부 파일이 존재할 때를 제외하고 서비스 엔드포인트 인터페이스의 생성에 영향을 주지 않습니다.
- MIME 첨부 파일:WSDL 1.1 준수 WSDL 파일의 경우, MINE 첨부 파일로서 바인딩에서 정의되는 조작 메시지의 일부가 선언된 파트와 상관 없이 첨부 파일 유형의 매개변수가 됩니다. 예를 들어, 다음과 같습니다.
JAX-RPC 스펙에는 다음 MIME 유형에 대한 지원이 필요합니다.XML: <wsdl:types> <schema ...> <complexType name="ArrayOfBinary"> <restriction base="soapenc:Array"> <attribute ref="soapenc:arrayType" wsdl:arrayType="xsd:binary[]"/> </restriction> </complexType> </schema> </wsdl:types> <wsdl:message name="request"> <part name="param1" type="ns:ArrayOfBinary"/> <wsdl:message name="response"/> <wsdl:message name="response"/> ... <wsdl:operation name="myMethod"> <input name="input" message="request"/> <output name="output" message="response"/> </wsdl:operation> ... <binding ... <wsdl:operation name="myMethod"> <input> <mime:multipartRelated> <mime:part> <mime:content part="param1" type="image/jpeg"/> </mime:part> </mime:multipartRelated> </input> ... </wsdl:operation> Java: void myMethod(java.awt.Image param1) ...
표 4. MIME 유형 및 Java 유형의 맵핑. MIME 유형과 Java 유형 사이의 맵핑에 대해 설명합니다. MIME 유형 Java 유형 image/gif java.awt.Image image/jpeg java.awt.Image text/plain java.lang.String multipart/* javax.mail.internet.MimeMultipart text/xml javax.xml.transform.Source application/xml javax.xml.transform.Source
- MIME 첨부 파일:
- wsdl:service의 맵핑:
wsdl:service 요소가 생성된 서비스 인터페이스에 맵핑됩니다. 생성된 서비스 인터페이스에는 wsdl:service 요소에서 각 포트에 액세스하기 위한 메소드가 포함됩니다. 생성된 서비스 인터페이스가 JAX-RPC 스펙의 섹션 4.3.9, 4.3.10 및 4.3.11에서 논의됩니다.
또한, wsdl:service 요소가 구현 특정 ServiceLocator 클래스에 맵핑되고, 이는 생성된 서비스 인터페이스의 구현입니다.
- JAX-RPC 단순 XML 유형 맵핑:
이 도구에 대해 자세히 학습하려면 JAX-RPC(Java API for XML-based Remote Procedure Call) 애플리케이션용 WSDL2Java 명령행 도구에 대해 정보를 읽어보십시오.
WSDL과 SOAP 메시지 사이의 맵핑
WSDL 파일은 네트워크 연결을 통해 전송되는 SOAP 메시지의 형식을 정의합니다. WSDL2Java 명령 및 WebSphere Application Server 런타임은 WSDL 파일에서 정보를 사용하여 SOAP 메시지가 적절하게 직렬화되고 직렬 해제되는지 확인합니다.
wsdl:binding 요소가 RPC 형식을 사용하여 전송되는 메시지를 표시하는 경우, SOAP 메시지에 조작을 정의하는 요소가 포함됩니다. wsdl:binding 요소가 문서 형식을 사용하여 전송되는 메시지를 표시하는 경우, SOAP 메시지에는 조작 요소가 포함되지 않습니다.
wsdl:part 요소가 유형 속성을 사용하여 정의되면 파트의 이름 및 유형이 메시지에 사용됩니다. wsdl:part 요소가 요소 속성을 사용하여 정의되면 요소의 이름 및 유형이 메시지에서 사용됩니다. 요소 속성이 use="encoded"일 때 JAX-RPC 스펙에 의해 지원되지 않습니다.
DOCUMENT/LITERAL
WSDL:
<xsd:element name="c" type="xsd:int"/>
<xsd:element name="method">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="a" type="xsd:string"/>
<xsd:element ref="ns:c"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
...
<wsdl:message name="request">
<part name="parameters" element="ns:method"/>
</wsdl:message>
...
<wsdl:operation name="method">
<input message="request"/>
...
Message:
<soap:body>
<ns:method>
<a>ABC</a>
<c>123</a>
<ns:method>
</soap:body>
RPC/ENCODED
WSDL:
<xsd:element name="c" type="xsd:int"/>
...
<wsdl:message name="request">
<part name="a" type="xsd:string"/>
<part name="b" element="ns:c"/>
</wsdl:message>
...
<wsdl:operation name="method">
<input message="request"/>
...
Message:
<soap:body>
<ns:method>
<a xsi:type="xsd:string">ABC</a>
<element attribute is not permitted in rpc/encoded mode>
</ns:method>
</soap:body>
DOCUMENT/LITERAL not wrapped
WSDL:
<xsd:element name="c" type="xsd:int"/>
...
<wsdl:message name="request">
<part name="a" type="xsd:string"/>
<part name="b" element="ns:c"/>
</wsdl:message>
...
<wsdl:operation name="method">
<input message="request"/>
...
Message:
<soap:body>
<a>ABC</a>
<c>123</a>
</soap:body>