Foros del Web » Programación para mayores de 30 ;) » Java »

EJB Web Service con Weblogic

Estas en el tema de EJB Web Service con Weblogic en el foro de Java en Foros del Web. Hola, estoy tranado de crear un web service para weblogic 8.1. Como ide uso el eclipse, y para la generacion de los xmls uso xdoclet. ...
  #1 (permalink)  
Antiguo 19/07/2005, 05:38
 
Fecha de Ingreso: septiembre-2004
Mensajes: 191
Antigüedad: 19 años, 7 meses
Puntos: 1
EJB Web Service con Weblogic - SOLUCIONADO

Hola, estoy tranado de crear un web service para weblogic 8.1. Como ide uso el eclipse, y para la generacion de los xmls uso xdoclet.

Tengo el siguiente EJB:

h50webServicesSesionEJB

con este bean:

Código PHP:
package h50webServicesSesionEJB;

import java.rmi.RemoteException;

import javax.ejb.CreateException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;

/**
 * <p>Título: H50WebServicesSesionBean</p>
 * <p>Descripción: EJB que para publicar los web services de la aplicacion</p>
 * @version 1.0
 *
 * @ejb.bean name="H50WebServicesSesion"
 *    jndi-name="h50.h50H50WebServicesSesionEJB"
 *    type="Stateless"
 *      view-type="all"
 *      transaction-type="Container"
 * @ejb.interface extends="javax.ejb.EJBObject"
 *  service-endpoint-class="h50webServicesSesionEJB.H50WebServicesEndPoint"
 *
 * @weblogic.ejb trans-timeout-seconds="60"
 *          enable-call-by-reference="True"
 * 
 * @wsee.port-component
 * name="h50webServicesSesionEJB.H50WebServicesEndPoint" 
 * wsdl-port="h50:H50WebServicesPort"
 * service-endpoint-interace="h50webServicesSesionEJB.H50WebServicesEndPoint"
 * service-endpoint-bean="h50webServicesSesionEJB.H50WebServicesSesionBean"
 */
public class H50WebServicesSesionBean implements SessionBean 
 
SessionContext sessionContext
  
/**
   * Lanza una consulta sencilla con statement que sólo devuelve un string.
   * @param strPfFoCoop String: Numero de folio de la cooperativa
   * @param strPfCtipex String: Tipo de solicitud
   * @param strPfFoCoop strPfIdioma: Idioma
   * @return ArrayList: Arraylist con los datos de la solicitud autorizacion de trabajadores
   * @throws Exception
   *
   * @ejb.interface-method view-type="service-endpoint"   
   */
  
public String fncRemota (String strPfthrows Exception {      
      try{   
          
System.out.println("WEB SERVICES");
          
System.out.println("Parametro entrada:" strPf);                   
          return 
"FIN WEB SERVICES";
      }
      catch(
Exception e){
          throw new 
RemoteException(""e);
      }
  }  

  
/**
   * @ejb.create-method
   */
  
public void ejbCreate() throws CreateException {
  }

  public 
void ejbRemove() {}

  public 
void ejbActivate() {}

  public 
void ejbPassivate() {}

  public 
void setSessionContext(SessionContext sessionContext) {
    
this.sessionContext sessionContext;
  }

y en el build.xml tengo esta tarea ant que me genera las clases End-point, el home, remote,local y local home y los descriptores ejb-jar,weblogic-ejb-jar,jaxrpc-mapping,webservices, y el wsdl

Código PHP:
<target name="generar_WebServicesEJB">
                    <echo 
message="Generando interfaces y descriptores ..."/>
                    <
ejbdoclet destdir="../h50/h50webServicesSesionEJB/src" force="true" verbose="true">
                        <
fileset dir="../h50/h50webServicesSesionEJB/src" includes="**/*.java"/>
                        <
remoteinterface/>
                        <
homeinterface/>
                        <
localhomeinterface/>
                        <
localinterface/>
                        <
service-endpoint/>
                        <
deploymentdescriptor destdir="../h50/h50webServicesSesionEJB/src/META-INF"/>
                        <
xmlTemplate havingClassTag="weblogic.ejb" templateFile="weblogic-ejb-jar.xdt"
                            
destinationFile="META-INF/weblogic-ejb-jar.xml"/>
                    </
ejbdoclet>
                     <
wseedoclet
                    wsdlFile
="wsdl/h50WebServices.wsdl"
                    
jaxrpcMappingFile="jaxrpc-mapping.xml"
                    
wseeSpec="1.1"
                    
destdir="../h50/h50webServicesSesionEJB/src/META-INF"
                    
mergeDir="merge"
                    
excludedtags="@version,@author,@todo"
                    
addedtags="@xdoclet-generated at ${TODAY},@copyright The XDoclet Team,@author XDoclet,@version ${version}"
                    
force="true"
                    
verbose="true">
                        <
packageNamespaceMapping packages="h50webServicesSesionEJB" namespace="http://localhost:7001/h50WebServices"/>
                        <
fileset dir="../h50/h50webServicesSesionEJB/src/" defaultexcludes="yes">
                                <include 
name="h50webServicesSesionEJB/H50WebServicesSesionBean.java" />
                        </
fileset>
                        <
deploymentdescriptor name="h50WebService" />
                        <
jaxrpc-mapping/>
                        <
wsdl/>
                    </
wseedoclet>
                </
target
Este EJB esta dentro de una aplicacion con sus diferentes modulos.
Al deployar la aplicacion en el weblogic me da como correcto, pero no se como probar el servicio. Intento acceder a
Código:
http://localhost:7001/h50WebServices
como he puesto en la tarea ant, pero da como q no existe.Ademas no se q ruta deberia de poner para q me debuelva el wsdl

Dejo aki los XMLs que me genera el xdoclet:

Última edición por sanmi69; 22/07/2005 a las 05:14 Razón: Problema Solucionado
  #2 (permalink)  
Antiguo 19/07/2005, 05:39
 
Fecha de Ingreso: septiembre-2004
Mensajes: 191
Antigüedad: 19 años, 7 meses
Puntos: 1
EJB-JAR.XML
Código PHP:
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd">

<ejb-jar >

   <description><![CDATA[No Description.]]></description>
   <display-name>Generated by XDoclet</display-name>

   <enterprise-beans>

      <!-- Session Beans -->
      <session >
         <description><![CDATA[<p>Título: H50WebServicesSesionBean</p> <p>Descripción: EJB que para publicar los web services de la aplicacion</p> <p>Copyright: Copyright (c) 2005</p> <p>Empresa: Eurohelp </p>]]></description>

         <ejb-name>H50WebServicesSesion</ejb-name>

         <home>h50webServicesSesionEJB.H50WebServicesSesionHome</home>
         <remote>h50webServicesSesionEJB.H50WebServicesSesion</remote>
         <local-home>h50webServicesSesionEJB.H50WebServicesSesionLocalHome</local-home>
         <local>h50webServicesSesionEJB.H50WebServicesSesionLocal</local>
         <ejb-class>h50webServicesSesionEJB.H50WebServicesSesionBean</ejb-class>
         <session-type>Stateless</session-type>
         <transaction-type>Container</transaction-type>

      </session>

     <!--
       To add session beans that you have deployment descriptor info for, add
       a file to your XDoclet merge directory called session-beans.xml that contains
       the <session></session> markup for those beans.
     -->

      <!-- Entity Beans -->
     <!--
       To add entity beans that you have deployment descriptor info for, add
       a file to your XDoclet merge directory called entity-beans.xml that contains
       the <entity></entity> markup for those beans.
     -->

      <!-- Message Driven Beans -->
     <!--
       To add message driven beans that you have deployment descriptor info for, add
       a file to your XDoclet merge directory called message-driven-beans.xml that contains
       the <message-driven></message-driven> markup for those beans.
     -->

   </enterprise-beans>

   <!-- Relationships -->

   <!-- Assembly Descriptor -->
     <!--
       To specify your own assembly descriptor info here, add a file to your
       XDoclet merge directory called assembly-descriptor.xml that contains
       the <assembly-descriptor></assembly-descriptor> markup.
     -->

   <assembly-descriptor >
     <!--
       To specify additional security-role elements, add a file in the merge
       directory called ejb-security-roles.xml that contains them.
     -->

   <!-- method permissions -->
     <!--
       To specify additional method-permission elements, add a file in the merge
       directory called ejb-method-permissions.ent that contains them.
     -->

   <!-- finder permissions -->

   <!-- transactions -->
     <!--
       To specify additional container-transaction elements, add a file in the merge
       directory called ejb-container-transaction.ent that contains them.
     -->

   <!-- finder transactions -->

     <!--
       To specify an exclude-list element, add a file in the merge directory
       called ejb-exclude-list.xml that contains it.
     -->
   </assembly-descriptor>

</ejb-jar>
jaxrpc-mapping.xml
Código PHP:
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE java-wsdl-mapping PUBLIC
  "-//IBM Corporation, Inc.//DTD J2EE JAX-RPC mapping 1.0//EN"
  "http://www.ibm.com/webservices/dtd/j2ee_jaxrpc_mapping_1_0.dtd">

<java-wsdl-mapping>
    <package-mapping>
      <package-type>h50webServicesSesionEJB</package-type>
      <namespaceURI>http://localhost:7001/h50WebServices</namespaceURI>
    </package-mapping>
    <!-- service interface mappings are still lacking -->
    <!-- service endpoint mappings are still lacking -->
</java-wsdl-mapping>
weblogic-ejb-jar.xml
Código PHP:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE weblogic-ejb-jar PUBLIC "-//BEA Systems, Inc.//DTD WebLogic 8.1.0 EJB//EN" "http://www.bea.com/servers/wls810/dtd/weblogic-ejb-jar.dtd">
<!-- Generado automaticamente con XDoclet. No editar! -->
<weblogic-ejb-jar>
    <description><![CDATA[Generado con XDoclet]]></description>
    <weblogic-enterprise-bean>

        <ejb-name>H50WebServicesSesion</ejb-name>
        <transaction-descriptor>
            <trans-timeout-seconds>60</trans-timeout-seconds>
        </transaction-descriptor>
        <enable-call-by-reference>True</enable-call-by-reference>
        <jndi-name>h50.h50H50WebServicesSesionEJB</jndi-name>

    </weblogic-enterprise-bean>
    <!-- Transacciones -->

    <!-- Metodos idempotentes -->
    <idempotent-methods>

    </idempotent-methods>
</weblogic-ejb-jar>
webservices.xml
Código PHP:
<?xml version="1.0" encoding="UTF-8"?>

<webservices  
 xmlns="http://java.sun.com/xml/ns/j2ee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://www.ibm.com/webservices/xsd/j2ee_web_services_1_1.xsd"
 version="1.1">
    <webservice-description>
     <icon>
     </icon>     
     <webservice-description-name>h50WebService</webservice-description-name>
     <wsdl-file>wsdl/h50WebServices.wsdl</wsdl-file>
     <jaxrpc-mapping-file>jaxrpc-mapping.xml</jaxrpc-mapping-file>
     <port-component>
        <icon>
        </icon>
         <port-component-name>h50webServicesSesionEJB.H50WebServicesEndPoint</port-component-name>        
        <wsdl-port>h50webServicesSesionEJB.H50WebServicesEndPoint</wsdl-port>
        <service-endpoint-interface>h50webServicesSesionEJB.H50WebServicesEndPoint</service-endpoint-interface>
        <service-impl-bean>
            <ejb-link>H50WebServicesSesion</ejb-link>
        </service-impl-bean>
     </port-component>
    </webservice-description> 
</webservices>
h50WebServices.wsdl
Código PHP:
<?xml version="1.0" encoding="UTF-8"?>

<wsdl:definitions
   targetNamespace="http://test.jboss.org/handler"
   xmlns:intf="http://test.jboss.org/handler"
   xmlns="http://schemas.xmlsoap.org/wsdl/"
   xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
   xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
   xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
   xmlns:xsd="http://www.w3.org/2001/XMLSchema">

   <wsdl:message name="testResponse">
   </wsdl:message>
   <wsdl:message name="testRequest">
   </wsdl:message>

   <wsdl:portType name="HandlerPort">
      <wsdl:operation name="test">
         <wsdl:input message="intf:testRequest"/>
         <wsdl:output message="intf:testResponse"/>
      </wsdl:operation>
   </wsdl:portType>

   <wsdl:binding name="HandlerBinding" type="intf:HandlerPort">
      <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
      <wsdl:operation name="test">
         <wsdlsoap:operation soapAction=""/>
         <wsdl:input>
            <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://test.jboss.org/handler" use="encoded"/>
         </wsdl:input>
         <wsdl:output>
            <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://test.jboss.org/handler" use="encoded"/>
         </wsdl:output>
      </wsdl:operation>
   </wsdl:binding>

   <wsdl:service name="Handler">
      <wsdl:port binding="intf:HandlerBinding" name="Handler">
         <wsdlsoap:address location="http://dummy_location"/>
      </wsdl:port>
   </wsdl:service>

</wsdl:definitions>
las clases generadas no tienen nigun misterio asik no pongo el codigo, si alguin lo necesita para ayudarme las pongo.

PD: Genere esto a partir de lo que encontre en internet, no se si estara bien

saludos y gracias
  #3 (permalink)  
Antiguo 22/07/2005, 05:12
 
Fecha de Ingreso: septiembre-2004
Mensajes: 191
Antigüedad: 19 años, 7 meses
Puntos: 1
Me autorespondo yo solito

Primero hay que crear un ejb stateless de sesion. Una vez creado el stateless de sesion hay q crear la siguiente tarea ant:

Código PHP:
<taskdef name="servicegen" classname="weblogic.ant.taskdefs.webservices.servicegen.ServiceGenTask" classpathref="antlib.classpath" />            
        <
target name="nombre_Tarea_que_Quieras">                
            <
servicegen 
              destEar
="ear_de_la_aplicacion"    
              
warName="war_que_contentra_el_WS"
              
contextURI="URI_realtiva_del_War" 
              <
service 
                ejbJar
="EJB_creado" 
                
targetNamespace="Recomendado_poner_url_del_war" 
                
serviceName="nombre_del_SW" 
                
serviceURI="dir_relativa_del_web_service" 
                
generateTypes="True" 
                
expandMethods="True" 
              </
service>
            </
servicegen>            
        </
target
con esto, nos creara el descriptor web-services.xml, y ya esta. Los demas descriptores y clases las genera weblogic 8.1 al vuelo.

Aki va un ejemplo de como seria una tarea:

Código PHP:
<taskdef name="servicegen" classname="weblogic.ant.taskdefs.webservices.servicegen.ServiceGenTask" classpathref="antlib.classpath" />            
        <
target name="generar_WebServices">                    
            <
servicegen 
              destEar
="exe"    
              
warName="h50War"
              
contextURI="h50War" 
              <
service 
                ejbJar
="exe/h50webServicesSesionEJB" 
                
targetNamespace="http://localhost:7001/h50War/" 
                
serviceName="h50WebService" 
                
serviceURI="/h50WebService" 
                
generateTypes="True" 
                
expandMethods="True" 
              </
service>
            </
servicegen>            
        </
target
Ahora la pagina para probar el WS sera:

Código PHP:
[protocolo]://[host]:[puerto]/[contextURI]/[serviceURI] 
y la url donde nos devolvera el wsdl es

Código PHP:
[protocolo]://[host]:[ puerto]/[contextURI]/[serviceURI]?WSDL 
PD: Si el ear y/o el war en vez de estar explotados en directorios se encunetran en un .ear o .war, en la ruta de estos parametros hay q indicarle el directorio donde se encuentra el .ear/.war y el nombre del archivo incluido su extension

PD2: Para el caso q el EJB estubiera comprimido en un .jar, realizar lo mismo que para los .ear/.war

Saludos y espero q le sea de utilidad a alguien mas, devido a k + de 30 personas han leido mi post pero no han sabido contestarme.
A final era mas sencillo de lo que parecia, gracias a q el WebLogic genera automaticamente las clases de interfaz, y los descritores necesarios a partir del EJB y del web-services.xml que genera la tarea "servicegen"
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 08:55.