Formato do XML SOAP

6 respostas
pugnator

Srs, eu tenho esse webservice:

@WebService(name="PessoaWS", targetNamespace="http://xxx.br/pessoa")
public class PessoaWS {

	@WebMethod
	public void colaborador(@WebParam(name="colaboradores") List colaboradores){
		try {
			Message esbMessage = SOAPProcessor.getMessage();
			String sabao = esbMessage.getBody().get().toString();
			System.out.println(sabao);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
}

Esse servico é chamado por um cliente em php, inicialmente esta dessa maneira pq estou testando, tendo em vista q o cliente ainda nao esta pronto, mas vai conter as informacoes que mockei:

$client = new SoapClient(null, array( 
       'location' => "http://localhost:9000",
       'uri' => "http://xxx.br/pessoa", 
       //'style'    => SOAP_RPC,
	'use' => SOAP_LITERAL,
	'trace'=>true,
       'soap_version' => SOAP_1_1)); 
 

$contrato1 =  array('tipo_contrato' => 'Mensalista', 'carga_horaria' => '220');
$contrato2 =  array('tipo_contrato' => 'Horista', 'carga_horaria' => '600');
$contratos =  array($contrato1 , $contrato2);

$endereco1 = array('sem_numero' => 'False', 'numero' => '5456');
$endereco2 = array('sem_numero' => 'True' ,  'numero' => '6000');
$enderecos = array($endereco1, $endereco2);

$telefone1 = array('numero' => '9999', 'tipo' => 'celular');
$telefone2 = array('numero' => '5555', 'tipo' => 'residencial');
$telefones = array($telefone1, $telefone2);

$email1 = array('email' => '9999', 'tipo' => 'pessoal');
$email2 = array('email' => '9999', 'tipo' => 'profissional');
$emails = array($email1, $email2);

$colaboradores = array('origem' => 'BennerRH' , 'codigo_origem' => '15431354', 'cpf' => '[telefone removido]' , 'nome' => 'Vaginia Hole' , 'rg' => '068974' ,
'rg_orgao_expedidor' => 'SSP/SC' ,'genero' => 'm' , 'data_nascimento' => '20/03/2000' , 'contratos'=>$contratos, 'enderecos'=> $enderecos,
'telefones'=> $telefones,'emails'=> $emails );

echo "<pre>";
var_dump($colaboradores); 

$header = new SoapHeader(null, null, null);
$client->__setSoapHeaders($header);

$res = $client->colaborador(new SoapParam($colaboradores, "colaboradores"));

O soap que recebo no java tem o formato abaixo:

<SOAP-ENV:Body>
        <ns1:colaborador>
            <colaboradores>
                <item>
                    <key>codigo_origem</key>
                    <value>15431354</value>
                </item>
                <item>
                    <key>data_nascimento</key>
                    <value>20/03/2000</value>
                </item>
                <item>
                    <key>contratos</key>
                    <value>
                        <ns2:Map>
                            <item>
                                <key>tipo_contrato</key>
                                <value>Mensalista</value>
                            </item>
                            <item>
                                <key>carga_horaria</key>
                                <value>220</value>
                            </item>
                        </ns2:Map>
                        <ns2:Map>
                            <item>
                                <key>tipo_contrato</key>
                                <value>Horista</value>
                            </item>
                            <item>
                                <key>carga_horaria</key>
                                <value>600</value>
                            </item>
                        </ns2:Map>
                    </value>
                </item>
                <item>
                    <key>enderecos</key>
                    <value>
                        <ns2:Map>
                            <item>
                                <key>sem_numero</key>
                                <value>False</value>
                            </item>
                            <item>
                                <key>numero</key>
                                <value>5456</value>
                            </item>
                        </ns2:Map>
                        <ns2:Map>
                            <item>
                                <key>sem_numero</key>
                                <value>True</value>
                            </item>
                            <item>
                                <key>numero</key>
                                <value>6000</value>
                            </item>
                        </ns2:Map>
                    </value>
                </item>
                <item>
                    <key>telefones</key>
                    <value>
                        <xsd:anyType>
                            <item>
                                <key>numero</key>
                                <value>5555</value>
                            </item>
                            <item>
                                <key>tipo</key>
                                <value>residencial</value>
                            </item>
                        </xsd:anyType>
                        <xsd:anyType/>
                    </value>
                </item>
                <item>
                    <key>emails</key>
                    <value>
                        <ns2:Map>
                            <item>
                                <key>email</key>
                                <value>9999</value>
                            </item>
                            <item>
                                <key>tipo</key>
                                <value>pessoal</value>
                            </item>
                        </ns2:Map>
                        <ns2:Map>
                            <item>
                                <key>email</key>
                                <value>9999</value>
                            </item>
                            <item>
                                <key>tipo</key>
                                <value>profissional</value>
                            </item>
                        </ns2:Map>
                    </value>
                </item>
            </colaboradores>
        </ns1:colaborador>
    </SOAP-ENV:Body>

O que eu gostaria de saber é se tem como eu fazzer com que o xml soap venha com outro formato. Como por exemplo:

<colaborador>
	<codigo_origem>15431354</codigo_origem>
	<cpf>[CPF removido]</cpf>
	<nome>Pimpim Lenore Webert de La Grana</nome>
	<rg>4.032.894-40</rg>
	<contratos>
		<contrato>
			<tipo_contrato>Mensalista</tipo_contrato>
			<carga_horaria>220</carga_horaria>
			<cargo>Programador Pleno</cargo>
			<funcao>Programador de Integração</funcao>
		</contrato>
	</contratos>
	<enderecos>
		<endereco>
			<sem_numero>False</sem_numero>
			<numero>5456</numero>
		</endereco>
	</enderecos>
	<telefones>
		<telefone>
			<numero>48-9999-1234</numero>
		</telefone>
	</telefones>
	<emails>
		<email>
			<email>[email removido]</email>
			<tipo>Pessoal</tipo>
		</email>
	</emails>
</colaborador>

6 Respostas

R

Disponibilize o WS com o parametro de entrada do tipo array ([]) ao invés de List

pugnator

Mudei.
Continua do mesmo jeito.

Acredito que seja algo na configuracao do client(php) ou do webservice(java)

R

Isso é do WS, pois ele que esta definindo o contrato de comunicação entre as partes (WSDL). Vc precisa que a entrada de dados seja igual ao seu exemplo?

O parametro de entrada do seu WS é gerado um complextype. Vc ja pensou em mudar o tipo de entrada? Por exemplo para um XML?

pugnator

Vc precisa que a entrada de dados seja igual ao seu exemplo?

Não precisa. botei List pq o cliente vai passar um array

R

Vc pode postar o codigo da Classe colaborador e dizer qual o servidor aplicação e versão do java?

pugnator

colaborador é o metodo. To usando jboss5,1+esb4.9 e jbossWS.

to tentando fazer nesse estilo Document/literal wrapped:

@WebMethods
  @WebResult(name ="z")
  @RequestWrapper(localname = "myMethod", className = "myMethod")
  @ResponseWrapper(localname = "myMethodResponse", className = "MyMethodResponse")

  public int myMethod (
    @WebParam(name = "x", targetNameSpace = "")
    int x,
    @WebParam(name = "y", targetNameSpace = "")
    float y);
}


<myMethod>
-0
3.14
myMethod>

O que eu queria é os nodes dentro do colaborador fossem mais simples como no exemplo acima, e nao cheio de como estou recebendo ...

Criado 26 de maio de 2011
Ultima resposta 27 de mai. de 2011
Respostas 6
Participantes 2