JBoss.org Community Documentation

5.11. RPC/Literal

With RPC there is a wrapper element that names the endpoint operation. Child elements of the RPC parent are the individual parameters. The SOAP body is constructed based on some simple rules:

  • The port type operation name defines the endpoint method name

  • Message parts are endpoint method parameters

RPC is defined by the style attribute on the SOAP binding.

	<binding name='EndpointInterfaceBinding' type='tns:EndpointInterface'>
	<soap:binding style='rpc' transport='http://schemas.xmlsoap.org/soap/http'/>
	<operation name='echo'>
		<soap:operation soapAction=''/>
		<input>
			<soap:body namespace='http://org.jboss.ws/samples/jsr181pojo' use='literal'/>
		</input>
		<output>
			<soap:body namespace='http://org.jboss.ws/samples/jsr181pojo' use='literal'/>
		</output>
	</operation>
</binding>

With rpc style web services the portType names the operation (i.e. the java method on the endpoint)

<portType name='EndpointInterface'>
	<operation name='echo' parameterOrder='String_1'>
	<input message='tns:EndpointInterface_echo'/>
<output message='tns:EndpointInterface_echoResponse'/>
	</operation>
  </portType>

Operation parameters are defined by individual message parts.

 <message name='EndpointInterface_echo'>
 <part name='String_1' type='xsd:string'/>
 </message>
 <message name='EndpointInterface_echoResponse'>
 <part name='result' type='xsd:string'/>
 </message>

Note, there is no complex type in XML schema that could validate the entire SOAP message payload.

 @WebService
 @SOAPBinding(style = SOAPBinding.Style.RPC)
 public class JSEBean01
 {
 @WebMethod
 @WebResult(name="result")
 public String echo(@WebParam(name="String_1") String input)
 {
 ...
 }
} 

The element names of RPC parameters/return values may be defined using the JAX-WS Annotations#javax.jws.WebParam and JAX-WS Annotations#javax.jws.WebResult respectively.