You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-user@axis.apache.org by John Grantham <jg...@shawlink.ca> on 2006/06/09 20:54:31 UTC
Problem with WSDL2Java Generated Code using JiBX bindings
I wonder if anybody has encountered this issue, and might know if i
am doing something wrong, or if this is a bug?
I am using WSDL2Java, which works ok with regular ADB bindings. I
want to use my own java value objects, however, and have been trying
out JiBX. My jibx bindings test out ok, and the WSDL2Java code
generation using jibx works somewhat, but it generates a
MessageReceiverInOut class that has a compilation problem where it
catches my custom exception and calls toOm(...).
also, none of the /resources files are getting generated, including
services.xml.
intel mac
Eclipse 3.2.0
java 1.5.0-06
jibx 1.1
----------------------------------------------------
Here are my schemas:
<?xml version="1.0" encoding="UTF-8" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://nextgen.ubc/schema/Dictionary"
xmlns:dict="http://nextgen.ubc/schema/Dictionary">
<xsd:simpleType name="StudentNumber">
<xsd:restriction base="xsd:string">
<xsd:length value="8"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="LastName">
<xsd:restriction base="xsd:string">
<xsd:maxLength value="20"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="GivenName">
<xsd:restriction base="xsd:string">
<xsd:maxLength value="20"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="Program">
<xsd:restriction base="xsd:string">
<xsd:minLength value="2"/>
<xsd:maxLength value="4"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="Campus">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="VAN"/>
<xsd:enumeration value="OKAN"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="Street">
<xsd:restriction base="xsd:string">
<xsd:maxLength value="30"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="City">
<xsd:restriction base="xsd:string">
<xsd:maxLength value="30"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="Province">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="BC"/>
<xsd:enumeration value="AB"/>
<xsd:enumeration value="SK"/>
<xsd:enumeration value="MB"/>
<xsd:enumeration value="ON"/>
<xsd:enumeration value="PQ"/>
<xsd:enumeration value="NB"/>
<xsd:enumeration value="NS"/>
<xsd:enumeration value="PE"/>
<xsd:enumeration value="NF"/>
<xsd:enumeration value="YT"/>
<xsd:enumeration value="NT"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="PostalCode">
<xsd:restriction base="xsd:string">
<xsd:pattern value="([A-Z]\d[A-Z]\d[A-Z]\d)"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="ErrorMessage">
<xsd:restriction base="xsd:string">
<xsd:maxLength value="30"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="ErrorCode">
<xsd:restriction base="xsd:string">
<xsd:length value="4"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>
<?xml version="1.0" encoding="UTF-8" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://nextgen.ubc/schema/StudentKey"
xmlns:key="http://nextgen.ubc/schema/StudentKey"
xmlns:dict="http://nextgen.ubc/schema/Dictionary">
<xsd:import namespace="http://nextgen.ubc/schema/Dictionary"
schemaLocation="Dictionary.xsd"/>
<xsd:element name="StudentNumber" type="dict:StudentNumber"/>
<xsd:element name="StudentKey">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="key:StudentNumber" minOccurs="1"
maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<?xml version="1.0" encoding="UTF-8" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://nextgen.ubc/schema/Address"
xmlns:addr="http://nextgen.ubc/schema/Address"
xmlns:dict="http://nextgen.ubc/schema/Dictionary">
<xsd:import namespace="http://nextgen.ubc/schema/Dictionary"
schemaLocation="Dictionary.xsd"/>
<xsd:element name="StudentNumber" type="dict:StudentNumber"/>
<xsd:element name="Street" type="dict:Street"/>
<xsd:element name="City" type="dict:City"/>
<xsd:element name="Province" type="dict:Province"/>
<xsd:element name="PostalCode" type="dict:PostalCode"/>
<xsd:element name="Address">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="addr:StudentNumber" minOccurs="1"
maxOccurs="1"/>
<xsd:element ref="addr:Street" minOccurs="1" maxOccurs="1"/>
<xsd:element ref="addr:City" minOccurs="1" maxOccurs="1"/>
<xsd:element ref="addr:Province" minOccurs="1" maxOccurs="1"/>
<xsd:element ref="addr:PostalCode" minOccurs="1"
maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<?xml version="1.0" encoding="UTF-8" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://nextgen.ubc/schema/StandardError"
xmlns:err="http://nextgen.ubc/schema/StandardError"
xmlns:dict="http://nextgen.ubc/schema/Dictionary">
<xsd:import namespace="http://nextgen.ubc/schema/Dictionary"
schemaLocation="Dictionary.xsd"/>
<xsd:element name="ErrorMessage" type="dict:ErrorMessage"/>
<xsd:element name="ErrorCode" type="dict:ErrorCode"/>
<xsd:element name="StandardError">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="err:ErrorMessage" minOccurs="1"
maxOccurs="1"/>
<xsd:element ref="err:ErrorCode" minOccurs="1" maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
----------------------------------
This is my wsdl file:
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions name="AddressRetrieval"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:key="http://nextgen.ubc/schema/StudentKey"
xmlns:addr="http://nextgen.ubc/schema/Address"
xmlns:err="http://nextgen.ubc/schema/StandardError"
xmlns:service="http://nextgen.ubc/wsdl/AddressRetrieval"
targetNamespace="http://nextgen.ubc/wsdl/AddressRetrieval">
<wsdl:types>
<xsd:schema>
<xsd:import namespace="http://nextgen.ubc/schema/StudentKey"
schemaLocation="../schemas/StudentKey.xsd"/>
<xsd:import namespace="http://nextgen.ubc/schema/Address"
schemaLocation="../schemas/Address.xsd"/>
<xsd:import namespace="http://nextgen.ubc/schema/
StandardError" schemaLocation="../schemas/StandardError.xsd"/>
</xsd:schema>
</wsdl:types>
<wsdl:message name="AddressRequest">
<wsdl:part element="key:StudentKey" name="AddressRequest" />
</wsdl:message>
<wsdl:message name="AddressResponse">
<wsdl:part element="addr:Address" name="AddressResponse" />
</wsdl:message>
<wsdl:message name="StandardError">
<wsdl:part element="err:StandardError" name="StandardError" />
</wsdl:message>
<wsdl:portType name="AddressRetrieval">
<wsdl:operation name="getAddress">
<wsdl:input message="service:AddressRequest" />
<wsdl:output message="service:AddressResponse" />
<wsdl:fault message="service:StandardError"
name="StandardError" />
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="AddressRetrievalSOAPBinding"
type="service:AddressRetrieval">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="getAddress">
<soap:operation soapAction="http://nextgen.ubc/wsdl/operation/
getAddress" />
<wsdl:input>
<soap:body parts="AddressRequest" use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body parts="AddressResponse" use="literal" />
</wsdl:output>
<wsdl:fault name="StandardError" >
<soap:fault name="StandardError" use="literal" />
</wsdl:fault>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="AddressRetrievalService">
<wsdl:port binding="service:AddressRetrievalSOAPBinding"
name="AddressRetrieval">
<soap:address location="http://www4.students.ubc.ca:9180/axis2/
services/AddressRetrievalService" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
---------------------------------------------
These are my dto classes:
package ubc.nextgen.dto;
public class StudentKey {
private String studentNumber = null;
private StudentKey() {} // required by jibx compiler
public StudentKey(String studentNumber) {
this.studentNumber = studentNumber;
}
public String getStudentNumber() {
return studentNumber;
}
}
package ubc.nextgen.dto;
public class Address {
private String studentNumber = null;
private String street = null;
private String city = null;
private String province = null;
private String postalCode = null;
private Address() {} // necessary for jibx binding compiler
public Address(String studentNumber, String street, String city,
String province, String postalCode) {
this.studentNumber = studentNumber;
this.street = street;
this.city = city;
this.province = province;
this.postalCode = postalCode;
}
public String getCity() {
return city;
}
public String getPostalCode() {
return postalCode;
}
public String getProvince() {
return province;
}
public String getStreet() {
return street;
}
public String getStudentNumber() {
return studentNumber;
}
}
package ubc.nextgen.dto;
public class StandardError {
private String errorCode = null;
private String errorMessage = null;
private StandardError() {}
public StandardError(String errorCode, String errorMessage) {
this.errorCode = errorCode;
this.errorMessage = errorMessage;
}
public String getErrorCode() {
return errorCode;
}
public String getErrorMessage() {
return errorMessage;
}
}
----------------------------------------
This is my jibx binding file:
<binding>
<mapping name="Address" class="ubc.nextgen.dto.Address">
<namespace uri="http://nextgen.ubc/schema/Address"
default="elements"/>
<value name="StudentNumber" field="studentNumber"/>
<value name="Street" field="street"/>
<value name="City" field="city"/>
<value name="Province" field="province"/>
<value name="PostalCode" field="postalCode"/>
</mapping>
<mapping name="StudentKey" class="ubc.nextgen.dto.StudentKey">
<namespace uri="http://nextgen.ubc/schema/StudentKey"
default="elements"/>
<value name="StudentNumber" field="studentNumber"/>
</mapping>
<mapping name="StandardError" class="ubc.nextgen.dto.StandardError">
<namespace uri="http://nextgen.ubc/schema/StandardError"
default="elements"/>
<value name="ErrorCode" field="errorCode"/>
<value name="ErrorMessage" field="errorMessage"/>
</mapping>
</binding>
----------------------------------------
This is my Java2Wsdl command:
./WSDL2Java.sh -uri Workspace/nextgen/server/xml/wsdl/
AddressRetrieval.wsdl -s -ss -g -ssi -sd -d jibx -p
ubc.nextgen.service.address -o Workspace/nextgen/server -Ebindingfile
Workspace/nextgen/server/xml/binding/binding.xml
-----------------------------------------
And these are the generated service classes:
/**
* AddressRetrievalServiceMessageReceiverInOut.java This file was
* auto-generated from WSDL by the Apache Axis2 version: 1.0 May 04, 2006
* (09:21:04 IST)
*/
package ubc.nextgen.service.address;
/**
* AddressRetrievalServiceMessageReceiverInOut message receiver
*/
public class AddressRetrievalServiceMessageReceiverInOut
extends
org.apache.axis2.receivers.AbstractInOutSyncMessageReceiver {
//
private static javax.xml.namespace.QName[] qNameArray = { };
private static final org.jibx.runtime.IBindingFactory
bindingFactory;
static {
org.jibx.runtime.IBindingFactory factory = null;
try {
factory = org.jibx.runtime.BindingDirectory.getFactory
(ubc.nextgen.dto.Address.class);
} catch (Exception e) {
/**
* intentionally empty - report error on usage attempt
*/
}
bindingFactory = factory;
}
public void invokeBusinessLogic(
org.apache.axis2.context.MessageContext msgContext,
org.apache.axis2.context.MessageContext newMsgContext)
throws org.apache.axis2.AxisFault {
try {
// get the implementation class for the Web Service
Object obj = getTheImplementationObject(msgContext);
//Inject the Message Context if it is asked for
org.apache.axis2.engine.DependencyManager.configureBusinessLogicProvider
(obj,
msgContext.getOperationContext());
AddressRetrievalServiceSkeletonInterface skel =
(AddressRetrievalServiceSkeletonInterface) obj;
//Out Envelop
org.apache.axiom.soap.SOAPEnvelope envelope = null;
//Find the axisOperation that has been set by the
Dispatch phase.
org.apache.axis2.description.AxisOperation op =
msgContext.getOperationContext()
.
getAxisOperation();
if (op == null) {
throw new org.apache.axis2.AxisFault(
"Operation is not located, if this is doclit
style the SOAP-ACTION should specified via the SOAP Action to use the
RawXMLProvider");
}
String methodName;
if ((op.getName() != null) &
((methodName = op.getName().getLocalPart()) !=
null)) {
if ("getAddress".equals(methodName)) {
ubc.nextgen.dto.Address param5 = null;
//doc style
param5 = skel.getAddress
((ubc.nextgen.dto.StudentKey) fromOM(
msgContext.getEnvelope().getBody()
.getFirstElement(),
ubc.nextgen.dto.StudentKey.class,
getEnvelopeNamespaces
(msgContext.getEnvelope())));
envelope = toEnvelope(getSOAPFactory
(msgContext), param5,
false);
}
newMsgContext.setEnvelope(envelope);
}
} catch
(ubc.nextgen.service.address.AddressRetrievalServiceSkeleton.StandardErr
orException e) {
org.apache.axis2.AxisFault f = new
org.apache.axis2.AxisFault(
"StandardErrorException");
f.setDetail(toOM(e.getFaultMessage(), false));
throw f;
}
catch (Exception e) {
throw org.apache.axis2.AxisFault.makeFault(e);
}
}
private org.apache.axiom.om.OMElement toOM
(ubc.nextgen.dto.Address param,
org.apache.axiom.soap.SOAPFactory factory, boolean
optimizeContent) {
if (param instanceof org.jibx.runtime.IMarshallable) {
if (bindingFactory == null) {
throw new RuntimeException(
"Could not find JiBX binding information for
ubc.nextgen.dto.Address, JiBX binding unusable");
}
org.jibx.runtime.IMarshallable marshallable =
(org.jibx.runtime.IMarshallable) param;
int index = marshallable.JiBX_getIndex();
org.apache.axis2.jibx.JiBXDataSource source = new
org.apache.axis2.jibx.JiBXDataSource(marshallable,
bindingFactory);
org.apache.axiom.om.OMNamespace namespace =
factory.createOMNamespace(bindingFactory.getElementNamespaces()[index],
null);
return factory.createOMElement(source,
bindingFactory.getElementNames()[index], namespace);
} else {
throw new RuntimeException(
"No JiBX <mapping> defined for class
ubc.nextgen.dto.Address");
}
}
private org.apache.axiom.soap.SOAPEnvelope toEnvelope(
org.apache.axiom.soap.SOAPFactory factory,
ubc.nextgen.dto.Address param, boolean optimizeContent) {
org.apache.axiom.soap.SOAPEnvelope envelope =
factory.getDefaultEnvelope();
if (param != null) {
envelope.getBody().addChild(toOM(param, factory,
optimizeContent));
}
return envelope;
}
private org.apache.axiom.om.OMElement toOM(
org.apache.axiom.om.OMElement param,
org.apache.axiom.soap.SOAPFactory factory, boolean
optimizeContent) {
if (param instanceof org.jibx.runtime.IMarshallable) {
if (bindingFactory == null) {
throw new RuntimeException(
"Could not find JiBX binding information for
ubc.nextgen.dto.Address, JiBX binding unusable");
}
org.jibx.runtime.IMarshallable marshallable =
(org.jibx.runtime.IMarshallable) param;
int index = marshallable.JiBX_getIndex();
org.apache.axis2.jibx.JiBXDataSource source = new
org.apache.axis2.jibx.JiBXDataSource(marshallable,
bindingFactory);
org.apache.axiom.om.OMNamespace namespace =
factory.createOMNamespace(bindingFactory.getElementNamespaces()[index],
null);
return factory.createOMElement(source,
bindingFactory.getElementNames()[index], namespace);
} else {
throw new RuntimeException(
"No JiBX <mapping> defined for class
org.apache.axiom.om.OMElement");
}
}
private org.apache.axiom.soap.SOAPEnvelope toEnvelope(
org.apache.axiom.soap.SOAPFactory factory,
org.apache.axiom.om.OMElement param, boolean optimizeContent) {
org.apache.axiom.soap.SOAPEnvelope envelope =
factory.getDefaultEnvelope();
if (param != null) {
envelope.getBody().addChild(toOM(param, factory,
optimizeContent));
}
return envelope;
}
private org.apache.axiom.om.OMElement toOM(
ubc.nextgen.dto.StudentKey param,
org.apache.axiom.soap.SOAPFactory factory, boolean
optimizeContent) {
if (param instanceof org.jibx.runtime.IMarshallable) {
if (bindingFactory == null) {
throw new RuntimeException(
"Could not find JiBX binding information for
ubc.nextgen.dto.Address, JiBX binding unusable");
}
org.jibx.runtime.IMarshallable marshallable =
(org.jibx.runtime.IMarshallable) param;
int index = marshallable.JiBX_getIndex();
org.apache.axis2.jibx.JiBXDataSource source = new
org.apache.axis2.jibx.JiBXDataSource(marshallable,
bindingFactory);
org.apache.axiom.om.OMNamespace namespace =
factory.createOMNamespace(bindingFactory.getElementNamespaces()[index],
null);
return factory.createOMElement(source,
bindingFactory.getElementNames()[index], namespace);
} else {
throw new RuntimeException(
"No JiBX <mapping> defined for class
ubc.nextgen.dto.StudentKey");
}
}
private org.apache.axiom.soap.SOAPEnvelope toEnvelope(
org.apache.axiom.soap.SOAPFactory factory,
ubc.nextgen.dto.StudentKey param, boolean optimizeContent) {
org.apache.axiom.soap.SOAPEnvelope envelope =
factory.getDefaultEnvelope();
if (param != null) {
envelope.getBody().addChild(toOM(param, factory,
optimizeContent));
}
return envelope;
}
/**
* get the default envelope
*/
private org.apache.axiom.soap.SOAPEnvelope toEnvelope(
org.apache.axiom.soap.SOAPFactory factory) {
return factory.getDefaultEnvelope();
}
private java.lang.Object fromOM(org.apache.axiom.om.OMElement
param,
java.lang.Class type, java.util.Map extraNamespaces) {
try {
if (bindingFactory == null) {
throw new RuntimeException(
"Could not find JiBX binding information for
com.sosnoski.seismic.jibxsoap.Query, JiBX binding unusable");
}
org.jibx.runtime.impl.UnmarshallingContext ctx =
(org.jibx.runtime.impl.UnmarshallingContext)
bindingFactory.createUnmarshallingContext();
org.jibx.runtime.IXMLReader reader = new
org.jibx.runtime.impl.StAXReaderWrapper
(param.getXMLStreamReaderWithoutCaching(),
"SOAP-message", true);
ctx.setDocument(reader);
return ctx.unmarshalElement(type);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* A utility method that copies the namepaces from the SOAPEnvelope
*/
private java.util.Map getEnvelopeNamespaces(
org.apache.axiom.soap.SOAPEnvelope env) {
java.util.Map returnMap = new java.util.HashMap();
java.util.Iterator namespaceIterator =
env.getAllDeclaredNamespaces();
while (namespaceIterator.hasNext()) {
org.apache.axiom.om.OMNamespace ns =
(org.apache.axiom.om.OMNamespace) namespaceIterator.next();
returnMap.put(ns.getPrefix(), ns.getName());
}
return returnMap;
}
} //end of class
/**
* AddressRetrievalServiceSkeleton.java This file was auto-generated
from WSDL
* by the Apache Axis2 version: 1.0 May 04, 2006 (09:21:04 IST)
*/
package ubc.nextgen.service.address;
/**
* AddressRetrievalServiceSkeleton java skeleton for the axisService
*/
public class AddressRetrievalServiceSkeleton
implements AddressRetrievalServiceSkeletonInterface {
/**
* Auto generated method signature
*
* @param param2
*/
public ubc.nextgen.dto.Address getAddress
(ubc.nextgen.dto.StudentKey param2)
throws
ubc.nextgen.service.address.AddressRetrievalServiceSkeleton.StandardErro
rException {
//Todo fill this with the necessary business logic
throw new java.lang.UnsupportedOperationException();
}
public static class StandardErrorException extends
java.rmi.RemoteException {
private org.apache.axiom.om.OMElement faultMessage;
public void setFaultMessage(org.apache.axiom.om.OMElement
msg) {
faultMessage = msg;
}
public org.apache.axiom.om.OMElement getFaultMessage() {
return faultMessage;
}
}
}
/**
* AddressRetrievalServiceSkeletonInterface.java This file was auto-
generated
* from WSDL by the Apache Axis2 version: 1.0 May 04, 2006 (09:21:04 IST)
*/
package ubc.nextgen.service.address;
/**
* AddressRetrievalServiceSkeletonInterface java skeleton interface
for the
* axisService
*/
public interface AddressRetrievalServiceSkeletonInterface {
/**
* Auto generated method signature
*
* @param param0
*/
public ubc.nextgen.dto.Address getAddress
(ubc.nextgen.dto.StudentKey param0)
throws
ubc.nextgen.service.address.AddressRetrievalServiceSkeleton.StandardErro
rException;
}
Re: Problem with WSDL2Java Generated Code using JiBX bindings
Posted by Dennis Sosnoski <dm...@sosnoski.com>.
Hi John,
I'd suspect the problem here is in the use of a fault - this is
something I hadn't tried out, and it looks like it's confusing things
because of the special way Axis2 code generation handles the exception.
I'm not even sure what's actually appropriate in this case - should your
StandardError class actually be an exception, or should there be a
generated exception class that has a StandardError field? In any case,
you should enter this in Jira and attach the files. I'm hoping to get
the code in place for unwrapping message elements using JiBX binding
over the next week or so, and will try to get this fixed at the same time.
Incidentally, you no longer need to supply default constructors in your
data classes, you can instead use the add-constructors='true' attribute
on your <binding> element (added as part of the JiBX 1.1 changes).
Thanks for including "JiBX" in the subject line of your email. I don't
try to follow all the Axis(1) messages on these lists, so unless the
subject line mentions Axis2 or JiBX I'm probably not going to read it.
- Dennis
Dennis M. Sosnoski
SOA, Web Services, and XML
Training and Consulting
http://www.sosnoski.com - http://www.sosnoski.co.nz
Seattle, WA +1-425-296-6194 - Wellington, NZ +64-4-298-6117
John Grantham wrote:
>
>
> I wonder if anybody has encountered this issue, and might know if i am
> doing something wrong, or if this is a bug?
>
> I am using WSDL2Java, which works ok with regular ADB bindings. I
> want to use my own java value objects, however, and have been trying
> out JiBX. My jibx bindings test out ok, and the WSDL2Java code
> generation using jibx works somewhat, but it generates a
> MessageReceiverInOut class that has a compilation problem where it
> catches my custom exception and calls toOm(...).
>
> also, none of the /resources files are getting generated, including
> services.xml.
>
> intel mac
> Eclipse 3.2.0
> java 1.5.0-06
> jibx 1.1
>
>
> ----------------------------------------------------
>
> Here are my schemas:
>
>
> <?xml version="1.0" encoding="UTF-8" ?>
> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
> targetNamespace="http://nextgen.ubc/schema/Dictionary"
> xmlns:dict="http://nextgen.ubc/schema/Dictionary">
>
> <xsd:simpleType name="StudentNumber">
> <xsd:restriction base="xsd:string">
> <xsd:length value="8"/>
> </xsd:restriction>
> </xsd:simpleType>
>
> <xsd:simpleType name="LastName">
> <xsd:restriction base="xsd:string">
> <xsd:maxLength value="20"/>
> </xsd:restriction>
> </xsd:simpleType>
>
> <xsd:simpleType name="GivenName">
> <xsd:restriction base="xsd:string">
> <xsd:maxLength value="20"/>
> </xsd:restriction>
> </xsd:simpleType>
>
> <xsd:simpleType name="Program">
> <xsd:restriction base="xsd:string">
> <xsd:minLength value="2"/>
> <xsd:maxLength value="4"/>
> </xsd:restriction>
> </xsd:simpleType>
>
> <xsd:simpleType name="Campus">
> <xsd:restriction base="xsd:string">
> <xsd:enumeration value="VAN"/>
> <xsd:enumeration value="OKAN"/>
> </xsd:restriction>
> </xsd:simpleType>
>
> <xsd:simpleType name="Street">
> <xsd:restriction base="xsd:string">
> <xsd:maxLength value="30"/>
> </xsd:restriction>
> </xsd:simpleType>
>
> <xsd:simpleType name="City">
> <xsd:restriction base="xsd:string">
> <xsd:maxLength value="30"/>
> </xsd:restriction>
> </xsd:simpleType>
>
> <xsd:simpleType name="Province">
> <xsd:restriction base="xsd:string">
> <xsd:enumeration value="BC"/>
> <xsd:enumeration value="AB"/>
> <xsd:enumeration value="SK"/>
> <xsd:enumeration value="MB"/>
> <xsd:enumeration value="ON"/>
> <xsd:enumeration value="PQ"/>
> <xsd:enumeration value="NB"/>
> <xsd:enumeration value="NS"/>
> <xsd:enumeration value="PE"/>
> <xsd:enumeration value="NF"/>
> <xsd:enumeration value="YT"/>
> <xsd:enumeration value="NT"/>
> </xsd:restriction>
> </xsd:simpleType>
>
> <xsd:simpleType name="PostalCode">
> <xsd:restriction base="xsd:string">
> <xsd:pattern value="([A-Z]\d[A-Z]\d[A-Z]\d)"/>
> </xsd:restriction>
> </xsd:simpleType>
>
> <xsd:simpleType name="ErrorMessage">
> <xsd:restriction base="xsd:string">
> <xsd:maxLength value="30"/>
> </xsd:restriction>
> </xsd:simpleType>
>
> <xsd:simpleType name="ErrorCode">
> <xsd:restriction base="xsd:string">
> <xsd:length value="4"/>
> </xsd:restriction>
> </xsd:simpleType>
> </xsd:schema>
>
>
>
> <?xml version="1.0" encoding="UTF-8" ?>
> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
> targetNamespace="http://nextgen.ubc/schema/StudentKey"
> xmlns:key="http://nextgen.ubc/schema/StudentKey"
> xmlns:dict="http://nextgen.ubc/schema/Dictionary">
>
> <xsd:import namespace="http://nextgen.ubc/schema/Dictionary"
> schemaLocation="Dictionary.xsd"/>
>
> <xsd:element name="StudentNumber" type="dict:StudentNumber"/>
>
> <xsd:element name="StudentKey">
> <xsd:complexType>
> <xsd:sequence>
> <xsd:element ref="key:StudentNumber" minOccurs="1" maxOccurs="1"/>
> </xsd:sequence>
> </xsd:complexType>
> </xsd:element>
> </xsd:schema>
>
>
>
> <?xml version="1.0" encoding="UTF-8" ?>
> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
> targetNamespace="http://nextgen.ubc/schema/Address"
> xmlns:addr="http://nextgen.ubc/schema/Address"
> xmlns:dict="http://nextgen.ubc/schema/Dictionary">
>
> <xsd:import namespace="http://nextgen.ubc/schema/Dictionary"
> schemaLocation="Dictionary.xsd"/>
>
> <xsd:element name="StudentNumber" type="dict:StudentNumber"/>
> <xsd:element name="Street" type="dict:Street"/>
> <xsd:element name="City" type="dict:City"/>
> <xsd:element name="Province" type="dict:Province"/>
> <xsd:element name="PostalCode" type="dict:PostalCode"/>
>
> <xsd:element name="Address">
> <xsd:complexType>
> <xsd:sequence>
> <xsd:element ref="addr:StudentNumber" minOccurs="1"
> maxOccurs="1"/>
> <xsd:element ref="addr:Street" minOccurs="1" maxOccurs="1"/>
> <xsd:element ref="addr:City" minOccurs="1" maxOccurs="1"/>
> <xsd:element ref="addr:Province" minOccurs="1" maxOccurs="1"/>
> <xsd:element ref="addr:PostalCode" minOccurs="1" maxOccurs="1"/>
> </xsd:sequence>
> </xsd:complexType>
> </xsd:element>
> </xsd:schema>
>
>
>
> <?xml version="1.0" encoding="UTF-8" ?>
> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
> targetNamespace="http://nextgen.ubc/schema/StandardError"
> xmlns:err="http://nextgen.ubc/schema/StandardError"
> xmlns:dict="http://nextgen.ubc/schema/Dictionary">
>
> <xsd:import namespace="http://nextgen.ubc/schema/Dictionary"
> schemaLocation="Dictionary.xsd"/>
>
> <xsd:element name="ErrorMessage" type="dict:ErrorMessage"/>
> <xsd:element name="ErrorCode" type="dict:ErrorCode"/>
>
> <xsd:element name="StandardError">
> <xsd:complexType>
> <xsd:sequence>
> <xsd:element ref="err:ErrorMessage" minOccurs="1" maxOccurs="1"/>
> <xsd:element ref="err:ErrorCode" minOccurs="1" maxOccurs="1"/>
> </xsd:sequence>
> </xsd:complexType>
> </xsd:element>
> </xsd:schema>
>
>
> ----------------------------------
>
> This is my wsdl file:
>
> <?xml version="1.0" encoding="UTF-8"?>
> <wsdl:definitions name="AddressRetrieval"
> xmlns:xsd="http://www.w3.org/2001/XMLSchema"
> xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
> xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding"
> xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
> xmlns:key="http://nextgen.ubc/schema/StudentKey"
> xmlns:addr="http://nextgen.ubc/schema/Address"
> xmlns:err="http://nextgen.ubc/schema/StandardError"
> xmlns:service="http://nextgen.ubc/wsdl/AddressRetrieval"
> targetNamespace="http://nextgen.ubc/wsdl/AddressRetrieval">
>
>
> <wsdl:types>
> <xsd:schema>
> <xsd:import namespace="http://nextgen.ubc/schema/StudentKey"
> schemaLocation="../schemas/StudentKey.xsd"/>
> <xsd:import namespace="http://nextgen.ubc/schema/Address"
> schemaLocation="../schemas/Address.xsd"/>
> <xsd:import namespace="http://nextgen.ubc/schema/StandardError"
> schemaLocation="../schemas/StandardError.xsd"/>
> </xsd:schema>
> </wsdl:types>
>
> <wsdl:message name="AddressRequest">
> <wsdl:part element="key:StudentKey" name="AddressRequest" />
> </wsdl:message>
>
> <wsdl:message name="AddressResponse">
> <wsdl:part element="addr:Address" name="AddressResponse" />
> </wsdl:message>
>
> <wsdl:message name="StandardError">
> <wsdl:part element="err:StandardError" name="StandardError" />
> </wsdl:message>
>
> <wsdl:portType name="AddressRetrieval">
> <wsdl:operation name="getAddress">
> <wsdl:input message="service:AddressRequest" />
> <wsdl:output message="service:AddressResponse" />
> <wsdl:fault message="service:StandardError" name="StandardError" />
> </wsdl:operation>
> </wsdl:portType>
>
> <wsdl:binding name="AddressRetrievalSOAPBinding"
> type="service:AddressRetrieval">
> <soap:binding style="document"
> transport="http://schemas.xmlsoap.org/soap/http" />
> <wsdl:operation name="getAddress">
> <soap:operation
> soapAction="http://nextgen.ubc/wsdl/operation/getAddress" />
> <wsdl:input>
> <soap:body parts="AddressRequest" use="literal" />
> </wsdl:input>
> <wsdl:output>
> <soap:body parts="AddressResponse" use="literal" />
> </wsdl:output>
> <wsdl:fault name="StandardError" >
> <soap:fault name="StandardError" use="literal" />
> </wsdl:fault>
> </wsdl:operation>
> </wsdl:binding>
>
> <wsdl:service name="AddressRetrievalService">
> <wsdl:port binding="service:AddressRetrievalSOAPBinding"
> name="AddressRetrieval">
> <soap:address
> location="http://www4.students.ubc.ca:9180/axis2/services/AddressRetrievalService"
> />
> </wsdl:port>
> </wsdl:service>
> </wsdl:definitions>
>
>
> ---------------------------------------------
>
> These are my dto classes:
>
>
> package ubc.nextgen.dto;
>
> public class StudentKey {
>
> private String studentNumber = null;
>
>
>
> private StudentKey() {} // required by jibx compiler
>
>
>
> public StudentKey(String studentNumber) {
> this.studentNumber = studentNumber;
> }
>
>
>
> public String getStudentNumber() {
> return studentNumber;
> }
> }
>
>
>
> package ubc.nextgen.dto;
>
> public class Address {
>
>
>
> private String studentNumber = null;
> private String street = null;
> private String city = null;
> private String province = null;
> private String postalCode = null;
>
> private Address() {} // necessary for jibx binding compiler
>
>
>
> public Address(String studentNumber, String street, String city,
> String province, String postalCode) {
> this.studentNumber = studentNumber;
> this.street = street;
> this.city = city;
> this.province = province;
> this.postalCode = postalCode;
> }
>
> public String getCity() {
> return city;
> }
>
> public String getPostalCode() {
> return postalCode;
> }
>
> public String getProvince() {
> return province;
> }
>
> public String getStreet() {
> return street;
> }
>
> public String getStudentNumber() {
> return studentNumber;
> }
> }
>
>
>
>
> package ubc.nextgen.dto;
>
> public class StandardError {
>
>
>
> private String errorCode = null;
> private String errorMessage = null;
>
>
>
> private StandardError() {}
>
>
>
> public StandardError(String errorCode, String errorMessage) {
> this.errorCode = errorCode;
> this.errorMessage = errorMessage;
> }
>
> public String getErrorCode() {
> return errorCode;
> }
>
> public String getErrorMessage() {
> return errorMessage;
> }
> }
>
>
> ----------------------------------------
>
>
> This is my jibx binding file:
>
>
> <binding>
> <mapping name="Address" class="ubc.nextgen.dto.Address">
> <namespace uri="http://nextgen.ubc/schema/Address"
> default="elements"/>
> <value name="StudentNumber" field="studentNumber"/>
> <value name="Street" field="street"/>
> <value name="City" field="city"/>
> <value name="Province" field="province"/>
> <value name="PostalCode" field="postalCode"/>
> </mapping>
>
> <mapping name="StudentKey" class="ubc.nextgen.dto.StudentKey">
> <namespace uri="http://nextgen.ubc/schema/StudentKey"
> default="elements"/>
> <value name="StudentNumber" field="studentNumber"/>
> </mapping>
>
> <mapping name="StandardError" class="ubc.nextgen.dto.StandardError">
> <namespace uri="http://nextgen.ubc/schema/StandardError"
> default="elements"/>
> <value name="ErrorCode" field="errorCode"/>
> <value name="ErrorMessage" field="errorMessage"/>
> </mapping>
> </binding>
>
>
> ----------------------------------------
>
> This is my Java2Wsdl command:
>
> ./WSDL2Java.sh -uri
> Workspace/nextgen/server/xml/wsdl/AddressRetrieval.wsdl -s -ss -g -ssi
> -sd -d jibx -p ubc.nextgen.service.address -o Workspace/nextgen/server
> -Ebindingfile Workspace/nextgen/server/xml/binding/binding.xml
>
> -----------------------------------------
>
> And these are the generated service classes:
>
> /**
> * AddressRetrievalServiceMessageReceiverInOut.java This file was
> * auto-generated from WSDL by the Apache Axis2 version: 1.0 May 04, 2006
> * (09:21:04 IST)
> */
> package ubc.nextgen.service.address;
>
> /**
> * AddressRetrievalServiceMessageReceiverInOut message receiver
> */
> public class AddressRetrievalServiceMessageReceiverInOut
> extends org.apache.axis2.receivers.AbstractInOutSyncMessageReceiver {
> //
> private static javax.xml.namespace.QName[] qNameArray = { };
> private static final org.jibx.runtime.IBindingFactory bindingFactory;
>
> static {
> org.jibx.runtime.IBindingFactory factory = null;
>
> try {
> factory =
> org.jibx.runtime.BindingDirectory.getFactory(ubc.nextgen.dto.Address.class);
> } catch (Exception e) {
> /**
> * intentionally empty - report error on usage attempt
> */
> }
>
> bindingFactory = factory;
> }
>
> public void invokeBusinessLogic(
> org.apache.axis2.context.MessageContext msgContext,
> org.apache.axis2.context.MessageContext newMsgContext)
> throws org.apache.axis2.AxisFault {
> try {
> // get the implementation class for the Web Service
> Object obj = getTheImplementationObject(msgContext);
>
> //Inject the Message Context if it is asked for
>
> org.apache.axis2.engine.DependencyManager.configureBusinessLogicProvider(obj,
> msgContext.getOperationContext());
>
> AddressRetrievalServiceSkeletonInterface skel =
> (AddressRetrievalServiceSkeletonInterface) obj;
>
> //Out Envelop
> org.apache.axiom.soap.SOAPEnvelope envelope = null;
>
> //Find the axisOperation that has been set by the Dispatch
> phase.
> org.apache.axis2.description.AxisOperation op =
> msgContext.getOperationContext()
>
> .getAxisOperation();
>
> if (op == null) {
> throw new org.apache.axis2.AxisFault(
> "Operation is not located, if this is doclit style
> the SOAP-ACTION should specified via the SOAP Action to use the
> RawXMLProvider");
> }
>
> String methodName;
>
> if ((op.getName() != null) &
> ((methodName = op.getName().getLocalPart()) !=
> null)) {
> if ("getAddress".equals(methodName)) {
> ubc.nextgen.dto.Address param5 = null;
>
> //doc style
> param5 =
> skel.getAddress((ubc.nextgen.dto.StudentKey) fromOM(
> msgContext.getEnvelope().getBody()
> .getFirstElement(),
> ubc.nextgen.dto.StudentKey.class,
>
> getEnvelopeNamespaces(msgContext.getEnvelope())));
>
> envelope = toEnvelope(getSOAPFactory(msgContext),
> param5,
> false);
> }
>
> newMsgContext.setEnvelope(envelope);
> }
> } catch
> (ubc.nextgen.service.address.AddressRetrievalServiceSkeleton.StandardErrorException
> e) {
> org.apache.axis2.AxisFault f = new org.apache.axis2.AxisFault(
> "StandardErrorException");
> f.setDetail(toOM(e.getFaultMessage(), false));
> throw f;
> }
> catch (Exception e) {
> throw org.apache.axis2.AxisFault.makeFault(e);
> }
> }
>
> private org.apache.axiom.om.OMElement toOM(ubc.nextgen.dto.Address
> param,
> org.apache.axiom.soap.SOAPFactory factory, boolean
> optimizeContent) {
> if (param instanceof org.jibx.runtime.IMarshallable) {
> if (bindingFactory == null) {
> throw new RuntimeException(
> "Could not find JiBX binding information for
> ubc.nextgen.dto.Address, JiBX binding unusable");
> }
>
> org.jibx.runtime.IMarshallable marshallable =
> (org.jibx.runtime.IMarshallable) param;
> int index = marshallable.JiBX_getIndex();
> org.apache.axis2.jibx.JiBXDataSource source = new
> org.apache.axis2.jibx.JiBXDataSource(marshallable,
> bindingFactory);
> org.apache.axiom.om.OMNamespace namespace =
> factory.createOMNamespace(bindingFactory.getElementNamespaces()[index],
> null);
>
> return factory.createOMElement(source,
> bindingFactory.getElementNames()[index], namespace);
> } else {
> throw new RuntimeException(
> "No JiBX <mapping> defined for class
> ubc.nextgen.dto.Address");
> }
> }
>
> private org.apache.axiom.soap.SOAPEnvelope toEnvelope(
> org.apache.axiom.soap.SOAPFactory factory,
> ubc.nextgen.dto.Address param, boolean optimizeContent) {
> org.apache.axiom.soap.SOAPEnvelope envelope =
> factory.getDefaultEnvelope();
>
> if (param != null) {
> envelope.getBody().addChild(toOM(param, factory,
> optimizeContent));
> }
>
> return envelope;
> }
>
> private org.apache.axiom.om.OMElement toOM(
> org.apache.axiom.om.OMElement param,
> org.apache.axiom.soap.SOAPFactory factory, boolean
> optimizeContent) {
> if (param instanceof org.jibx.runtime.IMarshallable) {
> if (bindingFactory == null) {
> throw new RuntimeException(
> "Could not find JiBX binding information for
> ubc.nextgen.dto.Address, JiBX binding unusable");
> }
>
> org.jibx.runtime.IMarshallable marshallable =
> (org.jibx.runtime.IMarshallable) param;
> int index = marshallable.JiBX_getIndex();
> org.apache.axis2.jibx.JiBXDataSource source = new
> org.apache.axis2.jibx.JiBXDataSource(marshallable,
> bindingFactory);
> org.apache.axiom.om.OMNamespace namespace =
> factory.createOMNamespace(bindingFactory.getElementNamespaces()[index],
> null);
>
> return factory.createOMElement(source,
> bindingFactory.getElementNames()[index], namespace);
> } else {
> throw new RuntimeException(
> "No JiBX <mapping> defined for class
> org.apache.axiom.om.OMElement");
> }
> }
>
> private org.apache.axiom.soap.SOAPEnvelope toEnvelope(
> org.apache.axiom.soap.SOAPFactory factory,
> org.apache.axiom.om.OMElement param, boolean optimizeContent) {
> org.apache.axiom.soap.SOAPEnvelope envelope =
> factory.getDefaultEnvelope();
>
> if (param != null) {
> envelope.getBody().addChild(toOM(param, factory,
> optimizeContent));
> }
>
> return envelope;
> }
>
> private org.apache.axiom.om.OMElement toOM(
> ubc.nextgen.dto.StudentKey param,
> org.apache.axiom.soap.SOAPFactory factory, boolean
> optimizeContent) {
> if (param instanceof org.jibx.runtime.IMarshallable) {
> if (bindingFactory == null) {
> throw new RuntimeException(
> "Could not find JiBX binding information for
> ubc.nextgen.dto.Address, JiBX binding unusable");
> }
>
> org.jibx.runtime.IMarshallable marshallable =
> (org.jibx.runtime.IMarshallable) param;
> int index = marshallable.JiBX_getIndex();
> org.apache.axis2.jibx.JiBXDataSource source = new
> org.apache.axis2.jibx.JiBXDataSource(marshallable,
> bindingFactory);
> org.apache.axiom.om.OMNamespace namespace =
> factory.createOMNamespace(bindingFactory.getElementNamespaces()[index],
> null);
>
> return factory.createOMElement(source,
> bindingFactory.getElementNames()[index], namespace);
> } else {
> throw new RuntimeException(
> "No JiBX <mapping> defined for class
> ubc.nextgen.dto.StudentKey");
> }
> }
>
> private org.apache.axiom.soap.SOAPEnvelope toEnvelope(
> org.apache.axiom.soap.SOAPFactory factory,
> ubc.nextgen.dto.StudentKey param, boolean optimizeContent) {
> org.apache.axiom.soap.SOAPEnvelope envelope =
> factory.getDefaultEnvelope();
>
> if (param != null) {
> envelope.getBody().addChild(toOM(param, factory,
> optimizeContent));
> }
>
> return envelope;
> }
>
> /**
> * get the default envelope
> */
> private org.apache.axiom.soap.SOAPEnvelope toEnvelope(
> org.apache.axiom.soap.SOAPFactory factory) {
> return factory.getDefaultEnvelope();
> }
>
> private java.lang.Object fromOM(org.apache.axiom.om.OMElement param,
> java.lang.Class type, java.util.Map extraNamespaces) {
> try {
> if (bindingFactory == null) {
> throw new RuntimeException(
> "Could not find JiBX binding information for
> com.sosnoski.seismic.jibxsoap.Query, JiBX binding unusable");
> }
>
> org.jibx.runtime.impl.UnmarshallingContext ctx =
> (org.jibx.runtime.impl.UnmarshallingContext)
> bindingFactory.createUnmarshallingContext();
> org.jibx.runtime.IXMLReader reader = new
> org.jibx.runtime.impl.StAXReaderWrapper(param.getXMLStreamReaderWithoutCaching(),
> "SOAP-message", true);
> ctx.setDocument(reader);
>
> return ctx.unmarshalElement(type);
> } catch (Exception e) {
> throw new RuntimeException(e);
> }
> }
>
> /**
> * A utility method that copies the namepaces from the SOAPEnvelope
> */
> private java.util.Map getEnvelopeNamespaces(
> org.apache.axiom.soap.SOAPEnvelope env) {
> java.util.Map returnMap = new java.util.HashMap();
> java.util.Iterator namespaceIterator =
> env.getAllDeclaredNamespaces();
>
> while (namespaceIterator.hasNext()) {
> org.apache.axiom.om.OMNamespace ns =
> (org.apache.axiom.om.OMNamespace) namespaceIterator.next();
> returnMap.put(ns.getPrefix(), ns.getName());
> }
>
> return returnMap;
> }
> } //end of class
>
>
> /**
> * AddressRetrievalServiceSkeleton.java This file was auto-generated
> from WSDL
> * by the Apache Axis2 version: 1.0 May 04, 2006 (09:21:04 IST)
> */
> package ubc.nextgen.service.address;
>
> /**
> * AddressRetrievalServiceSkeleton java skeleton for the axisService
> */
> public class AddressRetrievalServiceSkeleton
> implements AddressRetrievalServiceSkeletonInterface {
> /**
> * Auto generated method signature
> *
> * @param param2
> */
> public ubc.nextgen.dto.Address
> getAddress(ubc.nextgen.dto.StudentKey param2)
> throws
> ubc.nextgen.service.address.AddressRetrievalServiceSkeleton.StandardErrorException
> {
> //Todo fill this with the necessary business logic
> throw new java.lang.UnsupportedOperationException();
> }
>
> public static class StandardErrorException extends
> java.rmi.RemoteException {
> private org.apache.axiom.om.OMElement faultMessage;
>
> public void setFaultMessage(org.apache.axiom.om.OMElement msg) {
> faultMessage = msg;
> }
>
> public org.apache.axiom.om.OMElement getFaultMessage() {
> return faultMessage;
> }
> }
> }
>
>
>
> /**
> * AddressRetrievalServiceSkeletonInterface.java This file was
> auto-generated
> * from WSDL by the Apache Axis2 version: 1.0 May 04, 2006 (09:21:04 IST)
> */
> package ubc.nextgen.service.address;
>
> /**
> * AddressRetrievalServiceSkeletonInterface java skeleton interface for the
> * axisService
> */
> public interface AddressRetrievalServiceSkeletonInterface {
> /**
> * Auto generated method signature
> *
> * @param param0
> */
> public ubc.nextgen.dto.Address
> getAddress(ubc.nextgen.dto.StudentKey param0)
> throws
> ubc.nextgen.service.address.AddressRetrievalServiceSkeleton.StandardErrorException;
> }
>
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-user-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-user-help@ws.apache.org