Provedores de Ligação Customizada para Aplicativos JAX-RPC
Um provedor de ligação customizada é o pacote de classes do ligador de dados customizados com um arquivo de metadados declarativos. A principal finalidade de um provedor de ligação customizada é agregar ligadores de dados customizados relacionados para suportar cenários de um usuário específico. O provedor de ligação customizada é utilizado para conectar os ligadores de dados customizados às ferramentas do emissor e ao sistema de tempo de execução para que as ferramentas do emissor possam gerar artefatos apropriados e o sistema de tempo de execução possa aumentar seu sistema de mapeamento de tipos existentes para refletir os ligadores de dados customizados aplicados e chamá-los.
Um provedor de ligação customizada funciona com um tipo de esquema XML específico, enquanto os aplicativos envolvem alguns tipos de esquemas XML relacionados. Você precisa de um mecanismo para agregar e declarar vários binders de dados customizados para fornecer uma solução de ligação completa. O conceito do provedor de ligação customizada define um modelo declarativo que pode ser utilizado para conectar um conjunto de binders de dados customizados a ferramentas do emissor ou ao sistema de tempo de execução.
Consulte as informações sobre os binders de dados customizados e as informações sobre a interface CustomBinder para saber mais sobre binders de dados customizados e a API CustomBinder incluída no WebSphere Application Server para definir os binders de dados customizados. Depois de revisar os binders de dados customizados, você está pronto para implementar o pacote de binder customizado. Para saber como implementar esse pacote, consulte as informações sobre o uso de padrões para implementar binders de dados customizados para aplicativos JAX-RPC.
O arquivo de metadados declarativos, CustomBindingProvider.xml,é um arquivo XML empacotado com as classes de provedor customizado em um único JAR (Java™ archive) e localizado em /META-INF/services/directory. Uma vez que o arquivo JAR do provedor é empacotado, as informações binárias e o arquivo de metadados localizado no arquivo JAR podem ser usados pela ferramenta de linha de comandos WSDL2Java e o sistema de tempo de execução.
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema
targetNamespace=
"http://www.ibm.com/webservices/customdatabinding/2004/06"
xmlns:customdatabinding=
"http://www.ibm.com/webservices/customdatabinding/2004/06"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" attributeFormDefault="qualified">
<xsd:element name="provider" type="customdatabinding:providerType"/>
<xsd:complexType name="providerType">
<xsd:sequence>
<xsd:element name="description" type="xsd:string" minOccurs="0"/>
<xsd:element name="mapping" minOccurs="0" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="description" type="xsd:string" minOccurs="0"/>
<xsd:element name="xmlQName" type="xsd:QName"/>
<xsd:element name="javaName" type="xsd:string"/>
<xsd:element name="qnameScope"
type="customdatabinding:qnameScopeType"/>
<xsd:element name="binder" type="xsd:string"/>
</xsd:sequence>
/xsd:complexType>
</xsd:element>
<xsd:attribute name="scope"
type="customdatabinding:ProviderScopeType" default="module"/>
</xsd:sequence>
</xsd:complexType
<xsd:simpleType name="qnameScopeType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="simpleType"/>
<xsd:enumeration value="complexType"/>
<xsd:enumeration value="element"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="ProviderScopeType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="server"/>
<xsd:enumeration value="application"/>
<xsd:enumeration value="module"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>
<cdb:provider
xmlns:cdb="http://www.ibm.com/webservices/customdatabinding/2004/06"
xmlns:sdo="commonj.sdo">
<cdb:mapping>
<cdb:xmlQName>sdo:DataGraphType</cdb:xmlQName>
<cdb:javaName>commonj.sdo.DataGraph</cdb:javaName>
<cdb:qnameScope>complexType</cdb:qnameScope>
<cdb:binder>test.sdo.SDODataGraphBinder</cdb:binder>
</cdb:mapping>
</cdb:provider>
Você precisa importar seus ligadores de dados customizados para a ferramenta de linha de comandos WSDL2Java para fins de desenvolvimento. Os binders de dados customizados afetam como os artefatos de desenvolvimento, incluindo a Interface de Terminal em Serviço e os dados de mapeamento JSR 109, são gerados no arquivo WSDL (Web Services Description Language). A ferramenta de linha de comandos WSDL2Java acompanha o WebSphere Application Server e utiliza um arquivo de Java do binder customizado ou pacote de binder customizado, para gerar esses artefatos de desenvolvimento.
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://sdo.test"
xmlns:impl="http://sdo.test"
xmlns:intf="http://sdo.test"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sdo="commonj.sdo">
<wsdl:types>
<schema elementFormDefault="qualified" targetNamespace="http://sdo.test"
xmlns="http://www.w3.org/2001/XMLSchema" xmlns:sdo="commonj.sdo">
<import namespace="commonj.sdo" schemaLocation="sdo.xsd"/>
</schema>
</wsdl:types>
<wsdl:message name="echoResponse">
<wsdl:part element="sdo:datagraph" name="return"/>
</wsdl:message>
<wsdl:message name="echoRequest">
<wsdl:part element="sdo:datagraph" name="parameter"/>
</wsdl:message>
<wsdl:portType name="EchoService">
<wsdl:operation name="echo">
<wsdl:input message="impl:echoRequest" name="echoRequest"/>
<wsdl:output message="impl:echoResponse" name="echoResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="EchoServiceSoapBinding" type="impl:EchoService">
<wsdlsoap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="echo">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="echoRequest">
<wsdlsoap:body use="literal"/>
</wsdl:input>
<wsdl:output name="echoResponse">
<wsdlsoap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="EchoServiceService">
<wsdl:port binding="impl:EchoServiceSoapBinding" name="EchoService">
<wsdlsoap:address location="http://<uri>"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
Se você executar o comando WSDL2Java sem
o pacote de ligação de dados customizados, a seguinte Interface de Terminal em Serviço
é gerada com um tipo de parâmetro, conforme determinado pela especificação JAX-RPC:public interface EchoService extends java.rmi.Remote {
public javax.xml.soap.SOAPElement
echo(javax.xml.soap.SOAPElement parameter)
throws java.rmi.RemoteException;
}
Quando você executa o comando WSDL2Java com o pacote de ligação de dados
customizados, os binders de dados customizados são utilizados para gerar os tipos de parâmetros. Para aplicar os binders de dados customizados, utilize a opção -classpath na ferramenta WSDL2Java.
A ferramenta procura seu caminho de classe para localizar todos os arquivos com o mesmo
caminho de arquivo de /META-INF/services/CustomBindingProvider.xml.
O exemplo a seguir mostra como o comando pode ser utilizado para gerar uma Interface de
Terminal em Serviço com o tipo de parâmetro de commonj.sdo.Datagraph:WSDL2Java -role develop-server -container web classpath sdobinder.jar echo.wsdl
A Interface de Terminal em Serviço gerada é semelhante à seguinte:public interface EchoService extends java.rmi.Remote {
public commonj.sdo.DataGraph
echo(commonj.sdo.DataGraph parameter)
throws java.rmi.RemoteException;
}
O arquivo JAR compactado do componente de ligação customizado deve ser disponibilizado no tempo de execução para ter certeza de que o cliente de serviço da Web foi chamado, independentemente se for um cliente baseado em stub ou um cliente Dynamic Invocation Interface (DII). O mesmo se aplica
ao serviço.