terça-feira, 19 de abril de 2011

WebServices com Arquivos Grandes

Opa,

webservices esta se utilizado para muita coisa hoje em dia, inclusive para troca de arquivos. Como assim? mas tem o protocolo ftp pra isso! Sim mais para resolver problemas de firewall com portas bloqueadas, transferir alem do arquivo mais alguma informação, alem de aproveitar requisitos de segurança do sistema ja implementadas, a saida em alguns casos tem sido webservices mesmo.

Mais para que a coisa funcione, é preciso implementar uma outra tecnologia que faz com que as mensagens soap sejam tranferida como stream, e isso se chama mtom.

veja como a coisa acontece no java:


// o bean


import javax.activation.DataHandler;
import javax.xml.bind.annotation.XmlMimeType;
import javax.xml.bind.annotation.XmlType;

@XmlType
public class Arquivo {

@XmlMimeType("application/octet-stream")
protected DataHandler imagem;

// getter e setter



// o webservice



@WebService
@SOAPBinding(style=Style.RPC, use=Use.LITERAL, parameterStyle=ParameterStyle.WRAPPED)
public class BigFileWebService {

@Autowired
private ArquivoService arquivoService;


public void sendFile(@WebParam(name = "arquivo") Arquivo arquivo) {

try {

FileOutputStream outputStream = new FileOutputStream("/home/michael/Grande.tif");
arquivo.getImagem().writeTo(outputStream);

} catch (Exception e) {
e.printStackTrace();
}

}}



// codigo applicationContext.xml



<jaxws:endpoint
id="BigFileWebServiceEndpoint"
implementor="#BigFileWebService"
address="/BigFile">
<jaxws:properties>
<entry key="mtom-enabled" value="true"/>
</jaxws:properties>
</jaxws:endpoint>