[JBossWS] - Large File transfer from WS Client
by bblasko
I have a simple WS that uses MTOM/XOP. I'm using JBossAS 4.0.5 and JBossWS 2.0.1 GA.
I have the following annotations on the service class
@WebService(name="E2PIService", serviceName="E2PIService")
| @BindingType(value=javax.xml.ws.soap.SOAPBinding.SOAP12HTTP_MTOM_BINDING)
| @SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.WRAPPED)
|
and this is the simple WebMethod signature
@WebMethod(operationName="transferFile", action="transferFile")
| @XmlMimeType("application/octet-stream")
| public long transferFile(@XmlMimeType("application/octet-stream")javax.activation.DataHandler data)
|
When I invoke this service using a client, it works OK with small files but I get OutOfMemory exceptions on large files.
I do call setMTOMEnabled(true) on the client side and verified the data is being encoded correctly.
| SOAPBinding binding = (SOAPBinding)((BindingProvider)service).getBinding();
| binding.setMTOMEnabled(true);
|
| FileDataSource fds = new FileDataSource(new File("/bigData.dat"));
| long d = service.transferFile(new DataHandler(fds));
|
It appears that the client is not streaming the data. If I do the reverse where I send a file from the server to client, it does appear to correctly stream the data.
How can I enable the client to perform streaming of DataHandler type parameters?
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4099434#4099434
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4099434
17 years, 2 months
[JBossWS] - jboss 4.0.2 Webservices dynamic proxy client issue : could
by jones123
Hello,
I'm in a bit of a bind.
I'm working with webservices in jboss 4.0.2.
Trying a simple test at first.
I've successfully deployed a webservice.
However I have a problem when trying to access it using the a Dynamic Proxy Client. The problem
happens when I use a complex type.
I get the following exception:
java.rmi.RemoteException: null; nested exception is:
java.lang.reflect.UndeclaredThrowableException
at org.jboss.webservice.client.PortProxy.invoke(PortProxy.java:176)
at $Proxy1.createPerson(Unknown Source)
at com.mine.ws.client.WSEchoClient.main(WSEchoClient.java:65)
Caused by: java.lang.reflect.UndeclaredThrowableException
at $Proxy0.createPerson(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at org.jboss.webservice.client.PortProxy.invoke(PortProxy.java:105)
... 2 more
Caused by: org.xml.sax.SAXException: Deserializing parameter 'result': could not find deserializer for type {http://trials.ws.mine.com}Person
at org.jboss.axis.message.RPCHandler.onStartChild(RPCHandler.java:326)
at org.jboss.axis.encoding.DeserializationContextImpl.startElement(DeserializationContextImpl.java:1168)
at org.jboss.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:244)
at org.jboss.axis.message.SOAPElementAxisImpl.publishToHandler(SOAPElementAxisImpl.java:1386)
at org.jboss.axis.message.RPCElement.deserialize(RPCElement.java:262)
at org.jboss.axis.message.RPCElement.getParams(RPCElement.java:396)
at org.jboss.axis.client.Call.invoke(Call.java:2662)
at org.jboss.axis.client.Call.invoke(Call.java:2538)
at org.jboss.axis.client.Call.invokeInternal(Call.java:1976)
at org.jboss.axis.client.Call.invoke(Call.java:1914)
at org.jboss.webservice.client.CallImpl.invoke(CallImpl.java:265)
at org.jboss.axis.client.AxisClientProxy.invoke(AxisClientProxy.java:381)
... 8 more
/**********************************************************************************************/
/* running in eclipse ide with the following jars in classpath: */
/**********************************************************************************************/
axis-ws4ee.jar
jboss-w4ee-client.jar
wsdl4.jar
activation.jar
commons-discovery.jar
jbossall-client.jar
/**********************************************************************************************/
/* Simple Serializable bean containing just two strings */
/**********************************************************************************************/
package com.mine.ws.model;
public class Person implements java.io.Serializable {
private String firstname;
private String lastname;
/**
*
*/
public Person() {
}
/**
* @param firstname
* @param lastname
*/
public Person(String firstname, String lastname) {
super();
this.firstname = firstname;
this.lastname = lastname;
}
/**
* @return the firstname
*/
public String getFirstname() {
return firstname;
}
/**
* @param firstname the firstname to set
*/
public void setFirstname(String firstname) {
this.firstname = firstname;
}
/**
* @return the lastname
*/
public String getLastname() {
return lastname;
}
/**
* @param lastname the lastname to set
*/
public void setLastname(String lastname) {
this.lastname = lastname;
}
}
/**********************************************************************************************/
WS CLIENT CODE
/**********************************************************************************************/
package com.mine.ws.client;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import java.util.HashMap;
import java.util.Map;
import javax.xml.namespace.QName;
import javax.xml.rpc.Service;
import javax.xml.rpc.ServiceException;
import javax.xml.rpc.ServiceFactory;
import com.mine.ws.model.Person;
import com.mine.ws.trials.IEchoService;
public class WSEchoClient {
public static void main(String[] args) {
try {
String url ="http://localhost:8080/ejb-trials-j2ee/ws-trials-j2ee/EchoService?wsdl";
String namespace = "http://trials.ws.mine.com";
String servicename = "EchoService";
URL wsdlUrl = new URL(url);
QName qname = new QName(namespace,servicename);
ServiceFactory factory = ServiceFactory.newInstance();
Service service = factory.createService(wsdlUrl,qname);
IEchoService echoService = (IEchoService) service.getPort(IEchoService.class);
String firstname ="Clark";
String lastname = "Kent";
Person person = echoService.createPerson(firstname, lastname);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
} catch (ServiceException e) {
e.printStackTrace();
}
}
}
/**********************************************************************************************/
Generated WSDL using wscompile as noted in jboss docs
/**********************************************************************************************/
<?xml version="1.0" encoding="UTF-8"?>
<definitions name="EchoService" targetNamespace="http://trials.ws.mine.com" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://trials.ws.mine.com" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<schema targetNamespace="http://trials.ws.mine.com" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:soap11-enc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://trials.ws.mine.com" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<soap:operation soapAction=""/>
<soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://trials.ws.mine.com" use="encoded"/>
<soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://trials.ws.mine.com" use="encoded"/>
<soap:address location="http://localhost:8080/ejb-trials-j2ee/ws-trials-j2ee/EchoService"/>
/**********************************************************************************************/
mapping.xml generated from wscompile
/**********************************************************************************************/
<?xml version="1.0" encoding="UTF-8"?>
<java-wsdl-mapping xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.1" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://www.ibm.com/webservices/xsd/j2ee_jaxrpc_mapping_1_1.xsd">
<package-mapping>
<package-type>com.mine.ws.trials</package-type>
http://trials.ws.mine.com
</package-mapping>
<package-mapping>
<package-type>com.mine.ws.trials</package-type>
http://trials.ws.mine.com
</package-mapping>
<java-xml-type-mapping>
<java-type>com.mine.ws.model.Person</java-type>
<root-type-qname xmlns:typeNS="http://trials.ws.mine.com">typeNS:Person</root-type-qname>
<qname-scope>complexType</qname-scope>
<variable-mapping>
<java-variable-name>firstname</java-variable-name>
<xml-element-name>firstname</xml-element-name>
</variable-mapping>
<variable-mapping>
<java-variable-name>lastname</java-variable-name>
<xml-element-name>lastname</xml-element-name>
</variable-mapping>
</java-xml-type-mapping>
<service-interface-mapping>
<service-interface>com.mine.ws.trials.EchoService</service-interface>
<wsdl-service-name xmlns:serviceNS="http://trials.ws.mine.com">serviceNS:EchoService</wsdl-service-name>
<port-mapping>
<port-name>IEchoServicePort</port-name>
<java-port-name>IEchoServicePort</java-port-name>
</port-mapping>
</service-interface-mapping>
<service-endpoint-interface-mapping>
<service-endpoint-interface>com.mine.ws.trials.IEchoService</service-endpoint-interface>
<wsdl-port-type xmlns:portTypeNS="http://trials.ws.mine.com">portTypeNS:IEchoService</wsdl-port-type>
<wsdl-binding xmlns:bindingNS="http://trials.ws.mine.com">bindingNS:IEchoServiceBinding</wsdl-binding>
<service-endpoint-method-mapping>
<java-method-name>createPerson</java-method-name>
<wsdl-operation>createPerson</wsdl-operation>
<method-param-parts-mapping>
<param-position>0</param-position>
<param-type>java.lang.String</param-type>
<wsdl-message-mapping>
<wsdl-message xmlns:wsdlMsgNS="http://trials.ws.mine.com">wsdlMsgNS:IEchoService_createPerson</wsdl-message>
<wsdl-message-part-name>String_1</wsdl-message-part-name>
<parameter-mode>IN</parameter-mode>
</wsdl-message-mapping>
</method-param-parts-mapping>
<method-param-parts-mapping>
<param-position>1</param-position>
<param-type>java.lang.String</param-type>
<wsdl-message-mapping>
<wsdl-message xmlns:wsdlMsgNS="http://trials.ws.mine.com">wsdlMsgNS:IEchoService_createPerson</wsdl-message>
<wsdl-message-part-name>String_2</wsdl-message-part-name>
<parameter-mode>IN</parameter-mode>
</wsdl-message-mapping>
</method-param-parts-mapping>
<wsdl-return-value-mapping>
<method-return-value>com.mine.ws.model.Person</method-return-value>
<wsdl-message xmlns:wsdlMsgNS="http://trials.ws.mine.com">wsdlMsgNS:IEchoService_createPersonResponse</wsdl-message>
<wsdl-message-part-name>result</wsdl-message-part-name>
</wsdl-return-value-mapping>
</service-endpoint-method-mapping>
</service-endpoint-interface-mapping>
</java-wsdl-mapping>
/**********************************************************************************************/
config file used as parameter to wscompile
/**********************************************************************************************/
<?xml version="1.0" encoding="UTF-8"?>
/**********************************************************************************************/
webservices file
/**********************************************************************************************/
<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>
<webservice-description-name>EchoService</webservice-description-name>
<wsdl-file>META-INF/wsdl/EchoService.wsdl</wsdl-file>
<jaxrpc-mapping-file>META-INF/mapping.xml</jaxrpc-mapping-file>
<port-component>
<port-component-name>EchoService</port-component-name>
<wsdl-port xmlns:pfx="http://trials.ws.mine.com/">pfx:IEchoServicePort</wsdl-port>
<service-endpoint-interface>com.mine.ws.trials.IEchoService</service-endpoint-interface>
<service-impl-bean>
<ejb-link>EchoServiceBean</ejb-link>
</service-impl-bean>
</port-component>
</webservice-description>
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4099330#4099330
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4099330
17 years, 2 months
[JBossWS] - Re: Exception while deploying the webservice using jax-ws
by tpawankumar
alessio.soldano wrote:
anonymous wrote : Could you please post the code where you're using the XmlAccessorType annotation?
| I mean, are you using this
| Code:
|
| @XmlAccessorType(XmlAccessType.FIELD)
|
|
| or something different? (like an array of AccessType.FIELD)
|
| You might also start from the classes generated by wsconsume.
I have generated the classes from JAXB 2.0 . these classes are using this
@XmlAccessorType(XmlAccessType.FIELD)
and sample code for this
| //
| // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.0-b26-ea3
| // See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
| // Any modifications to this file will be lost upon recompilation of the source schema.
| // Generated on: 2007.10.22 at 10:28:58 AM IST
| //
|
|
| package com.covad.xsd.smo.vendororder;
|
| import java.util.ArrayList;
| import java.util.List;
| import javax.xml.bind.annotation.AccessType;
| import javax.xml.bind.annotation.XmlAccessorType;
| import javax.xml.bind.annotation.XmlElement;
| import javax.xml.bind.annotation.XmlType;
| import javax.xml.datatype.XMLGregorianCalendar;
| import com.covad.xsd.smo.vendororder.Client;
| import com.covad.xsd.smo.vendororder.LineItem;
| import com.covad.xsd.smo.vendororder.VendorOrder;
|
|
| /**
| * <p>Java class for VendorOrder complex type.
| *
| * <p>The following schema fragment specifies the expected content contained within this class.
| *
| * <pre>
| * <complexType name="VendorOrder">
| * <complexContent>
| * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
| * <sequence>
| * <element name="orderID" type="{http://www.w3.org/2001/XMLSchema}int"/>
| * <element name="vendorID" type="{http://www.w3.org/2001/XMLSchema}int"/>
| * <element name="vendorOrderID" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
| * <element name="orderReceivedDate" type="{http://www.w3.org/2001/XMLSchema}dateTime"/>
| * <element name="contractAcceptedFlag" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/>
| * <element name="contractAcceptedDate" type="{http://www.w3.org/2001/XMLSchema}dateTime" minOccurs="0"/>
| * <element name="productLanguageCode" type="{http://www.w3.org/2001/XMLSchema}string"/>
| * <element name="client" type="{http://smo.xsd.covad.com/vendororder}Client" minOccurs="0"/>
| * <element name="lineItem" type="{http://smo.xsd.covad.com/vendororder}LineItem" maxOccurs="unbounded" minOccurs="0"/>
| * </sequence>
| * </restriction>
| * </complexContent>
| * </complexType>
| * </pre>
| *
| *
| */
| @XmlAccessorType(AccessType.FIELD)
| @XmlType(name = "VendorOrder", propOrder = {
| "orderID",
| "vendorID",
| "vendorOrderID",
| "orderReceivedDate",
| "contractAcceptedFlag",
| "contractAcceptedDate",
| "productLanguageCode",
| "client",
| "lineItem"
| })
| public class VendorOrder {
|
| @XmlElement(namespace = "http://smo.xsd.covad.com/vendororder", type = Integer.class)
| protected int orderID;
| @XmlElement(namespace = "http://smo.xsd.covad.com/vendororder", type = Integer.class)
| protected int vendorID;
| @XmlElement(namespace = "http://smo.xsd.covad.com/vendororder")
| protected String vendorOrderID;
| @XmlElement(namespace = "http://smo.xsd.covad.com/vendororder")
| protected XMLGregorianCalendar orderReceivedDate;
| @XmlElement(namespace = "http://smo.xsd.covad.com/vendororder")
| protected Boolean contractAcceptedFlag;
| @XmlElement(namespace = "http://smo.xsd.covad.com/vendororder")
| protected XMLGregorianCalendar contractAcceptedDate;
| @XmlElement(namespace = "http://smo.xsd.covad.com/vendororder")
| protected String productLanguageCode;
| @XmlElement(namespace = "http://smo.xsd.covad.com/vendororder")
| protected Client client;
| @XmlElement(namespace = "http://smo.xsd.covad.com/vendororder")
| protected List<LineItem> lineItem;
|
| /**
| * Gets the value of the orderID property.
| *
| */
| public int getOrderID() {
| return orderID;
| }
|
| /**
| * Sets the value of the orderID property.
| *
| */
| public void setOrderID(int value) {
| this.orderID = value;
| }
|
| /**
| * Gets the value of the vendorID property.
| *
| */
| public int getVendorID() {
| return vendorID;
| }
|
| /**
| * Sets the value of the vendorID property.
| *
| */
| public void setVendorID(int value) {
| this.vendorID = value;
| }
|
| /**
| * Gets the value of the vendorOrderID property.
| *
| * @return
| * possible object is
| * {@link String }
| *
| */
| public String getVendorOrderID() {
| return vendorOrderID;
| }
|
| /**
| * Sets the value of the vendorOrderID property.
| *
| * @param value
| * allowed object is
| * {@link String }
| *
| */
| public void setVendorOrderID(String value) {
| this.vendorOrderID = value;
| }
|
| /**
| * Gets the value of the orderReceivedDate property.
| *
| * @return
| * possible object is
| * {@link XMLGregorianCalendar }
| *
| */
| public XMLGregorianCalendar getOrderReceivedDate() {
| return orderReceivedDate;
| }
|
| /**
| * Sets the value of the orderReceivedDate property.
| *
| * @param value
| * allowed object is
| * {@link XMLGregorianCalendar }
| *
| */
| public void setOrderReceivedDate(XMLGregorianCalendar value) {
| this.orderReceivedDate = value;
| }
|
| /**
| * Gets the value of the contractAcceptedFlag property.
| *
| * @return
| * possible object is
| * {@link Boolean }
| *
| */
| public Boolean isContractAcceptedFlag() {
| return contractAcceptedFlag;
| }
|
| /**
| * Sets the value of the contractAcceptedFlag property.
| *
| * @param value
| * allowed object is
| * {@link Boolean }
| *
| */
| public void setContractAcceptedFlag(Boolean value) {
| this.contractAcceptedFlag = value;
| }
|
| /**
| * Gets the value of the contractAcceptedDate property.
| *
| * @return
| * possible object is
| * {@link XMLGregorianCalendar }
| *
| */
| public XMLGregorianCalendar getContractAcceptedDate() {
| return contractAcceptedDate;
| }
|
| /**
| * Sets the value of the contractAcceptedDate property.
| *
| * @param value
| * allowed object is
| * {@link XMLGregorianCalendar }
| *
| */
| public void setContractAcceptedDate(XMLGregorianCalendar value) {
| this.contractAcceptedDate = value;
| }
|
| /**
| * Gets the value of the productLanguageCode property.
| *
| * @return
| * possible object is
| * {@link String }
| *
| */
| public String getProductLanguageCode() {
| return productLanguageCode;
| }
|
| /**
| * Sets the value of the productLanguageCode property.
| *
| * @param value
| * allowed object is
| * {@link String }
| *
| */
| public void setProductLanguageCode(String value) {
| this.productLanguageCode = value;
| }
|
| /**
| * Gets the value of the client property.
| *
| * @return
| * possible object is
| * {@link Client }
| *
| */
| public Client getClient() {
| return client;
| }
|
| /**
| * Sets the value of the client property.
| *
| * @param value
| * allowed object is
| * {@link Client }
| *
| */
| public void setClient(Client value) {
| this.client = value;
| }
|
| /**
| * Gets the value of the lineItem property.
| *
| * <p>
| * This accessor method returns a reference to the live list,
| * not a snapshot. Therefore any modification you make to the
| * returned list will be present inside the JAXB object.
| * This is why there is not a <CODE>set</CODE> method for the lineItem property.
| *
| * <p>
| * For example, to add a new item, do as follows:
| * <pre>
| * getLineItem().add(newItem);
| * </pre>
| *
| *
| * <p>
| * Objects of the following type(s) are allowed in the list
| * {@link LineItem }
| *
| *
| */
| public List<LineItem> getLineItem() {
| if (lineItem == null) {
| lineItem = new ArrayList<LineItem>();
| }
| return this.lineItem;
| }
|
| }
|
Please suggest on this.
Thanks in Advance.
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4099124#4099124
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4099124
17 years, 2 months
[JBossWS] - Re: WSTools to generate jaxrpc-mapping.xml file?
by wcydaip
So, the call to WSTools is not necessary? That's what I was hoping to find out.
Does this also mean that we no longer need a mapping file? If not, how is the mapping file generated? WSTools?
The reason I even tried to generate artifacts with the WSTools is to solve this error:
| 2007-10-25 11:42:57,765 ERROR [STDERR] javax.xml.ws.soap.SOAPFaultException: WSDLReader:None of the matching operations for soapAction http://actcenters.com/ALMVTC/action/Schedule.getCandidateScheduleData could successfully load the incoming request. Potential typemapper problem
| 2007-10-25 11:42:57,765 ERROR [STDERR] at org.jboss.ws.core.jaxws.SOAPFaultHelperJAXWS.getSOAPFaultException(SOAPFaultHelperJAXWS.java:69)
| 2007-10-25 11:42:57,765 ERROR [STDERR] at org.jboss.ws.core.jaxws.binding.SOAP11BindingJAXWS.throwFaultException(SOAP11BindingJAXWS.java:109)
| 2007-10-25 11:42:57,765 ERROR [STDERR] at org.jboss.ws.core.CommonSOAPBinding.unbindResponseMessage(CommonSOAPBinding.java:553)
| 2007-10-25 11:42:57,765 ERROR [STDERR] at org.jboss.ws.core.CommonClient.invoke(CommonClient.java:371)
| 2007-10-25 11:42:57,765 ERROR [STDERR] at org.jboss.ws.core.jaxws.client.ClientImpl.invoke(ClientImpl.java:243)
| 2007-10-25 11:42:57,765 ERROR [STDERR] at org.jboss.ws.core.jaxws.client.ClientProxy.invoke(ClientProxy.java:164)
| 2007-10-25 11:42:57,765 ERROR [STDERR] at org.jboss.ws.core.jaxws.client.ClientProxy.invoke(ClientProxy.java:150)
| 2007-10-25 11:42:57,765 ERROR [STDERR] at $Proxy60.getCandidateScheduleData(Unknown Source)
|
which is called via:
| public Event perform(HttpServletRequest request) throws HTMLActionException {
| logger.info("entering perform");
| String sEnrollId = "11110",
| sSSN = "-00004069",
| sClientPWD ="123",
| sClientId = "042";
|
| String req = "<GetCandidateScheduleData>"+
| "<Client Id='" + sClientId + "' Password='" + sClientPWD + "'/>"+
| "<EnrollId>" + sEnrollId + "</EnrollId>"+
| "<SSN>" + sSSN + "</SSN>" +
| "</GetCandidateScheduleData>";
|
| ALMVTC alm = new ALMVTC();
| ScheduleSoapPort ssp = alm.getScheduleSoapPort();
|
| Object resp = null;
|
| try {
| resp = ssp.getCandidateScheduleData((Object)req);
| //resp = ssp.serviceCheck(req);
| logger.info("the response for the candidates:"+resp);
| } catch (Exception e) {
| // TODO Auto-generated catch block
| e.printStackTrace();
| }
|
| logger.info("leaving perform");
| return null;
| }
|
Not sure if this will help but the full stack trace can be found here:
http://graham-king.blogspot.com/2007/10/full-stack-trace-for-jboss-mssql....
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4098990#4098990
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4098990
17 years, 2 months