Index: juddi-core/src/main/java/org/apache/juddi/model/X509SubjectName.java
===================================================================
--- juddi-core/src/main/java/org/apache/juddi/model/X509SubjectName.java	(revision 0)
+++ juddi-core/src/main/java/org/apache/juddi/model/X509SubjectName.java	(revision 0)
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2012 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.juddi.model;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+/**
+ *
+ */
+@Entity
+@Table(name="j3_x509_subject_name")
+public class X509SubjectName implements java.io.Serializable {
+    private static final long serialVersionUID = -6353389848796421616L;
+    
+    private Long id;
+    private X509KeyInfo x509KeyInfo;
+    private String content;
+    
+    @Id
+    @GeneratedValue(strategy=GenerationType.AUTO)
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    @ManyToOne(fetch = FetchType.LAZY)
+    @JoinColumn(name = "x509_key_info_key", nullable = false)
+    public X509KeyInfo getX509KeyInfo() {
+        return x509KeyInfo;
+    }
+
+    public void setX509KeyInfo(X509KeyInfo x509KeyInfo) {
+        this.x509KeyInfo = x509KeyInfo;
+    }
+
+    @Column(name="content")
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+    
+}
Index: juddi-core/src/main/java/org/apache/juddi/model/BusinessEntity.java
===================================================================
--- juddi-core/src/main/java/org/apache/juddi/model/BusinessEntity.java	(revision 1355564)
+++ juddi-core/src/main/java/org/apache/juddi/model/BusinessEntity.java	(working copy)
@@ -45,8 +45,8 @@
 	private BusinessCategoryBag categoryBag;
 	private List<BusinessService> businessServices = new ArrayList<BusinessService>(0);
 	private List<BusinessDescr> businessDescrs = new ArrayList<BusinessDescr>(0);
-	
 	private List<ServiceProjection> serviceProjections = new ArrayList<ServiceProjection>(0);
+        private List<Signature> signatures = new ArrayList<Signature>(0);
 
 	public BusinessEntity() {
 	}
@@ -169,6 +169,16 @@
 	public void setServiceProjections(List<ServiceProjection> serviceProjections) {
 		this.serviceProjections = serviceProjections;
 	}
+
+        @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "businessEntity")
+	@OrderBy
+        public List<Signature> getSignatures() {
+                return signatures;
+        }
+
+        public void setSignatures(List<Signature> signatures) {
+                this.signatures = signatures;
+        }
 	
 	
 }
Index: juddi-core/src/main/java/org/apache/juddi/model/X509KeyInfo.java
===================================================================
--- juddi-core/src/main/java/org/apache/juddi/model/X509KeyInfo.java	(revision 0)
+++ juddi-core/src/main/java/org/apache/juddi/model/X509KeyInfo.java	(revision 0)
@@ -0,0 +1,106 @@
+/*
+ * Copyright 2012 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.juddi.model;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToMany;
+import javax.persistence.OrderBy;
+import javax.persistence.Table;
+
+/**
+ *
+ */
+@Entity
+@Table(name="j3_x509_key_info")
+public class X509KeyInfo implements java.io.Serializable {
+    private static final long serialVersionUID = -7353389848796421618L;
+    
+    private Long id;
+    private KeyInfo keyInfo;
+    private List<X509SKI> x509SKI = new ArrayList<X509SKI>();
+    private List<X509SubjectName> x509SubjectName = new ArrayList<X509SubjectName>();
+    private List<X509Certificate> x509Certificate = new ArrayList<X509Certificate>();
+    private List<X509CRL> x509CRL = new ArrayList<X509CRL>();
+    
+    @Id
+    @GeneratedValue(strategy=GenerationType.AUTO)
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    @ManyToOne(fetch = FetchType.LAZY)
+    @JoinColumn(name = "key_info_key", nullable = false)
+    public KeyInfo getKeyInfo() {
+        return keyInfo;
+    }
+
+    public void setKeyInfo(KeyInfo keyInfo) {
+        this.keyInfo = keyInfo;
+    }
+
+    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "x509KeyInfo")
+    @OrderBy
+    public List<X509SKI> getX509SKI() {
+        return x509SKI;
+    }
+
+    public void setX509SKI(List<X509SKI> x509SKI) {
+        this.x509SKI = x509SKI;
+    }
+
+    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "x509KeyInfo")
+    @OrderBy
+    public List<X509SubjectName> getX509SubjectName() {
+        return x509SubjectName;
+    }
+
+    public void setX509SubjectName(List<X509SubjectName> x509SubjectName) {
+        this.x509SubjectName = x509SubjectName;
+    }
+
+    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "x509KeyInfo")
+    @OrderBy
+    public List<X509Certificate> getX509Certificate() {
+        return x509Certificate;
+    }
+
+    public void setX509Certificate(List<X509Certificate> x509Certificate) {
+        this.x509Certificate = x509Certificate;
+    }
+
+    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "x509KeyInfo")
+    @OrderBy
+    public List<X509CRL> getX509CRL() {
+        return x509CRL;
+    }
+
+    public void setX509CRL(List<X509CRL> x509CRL) {
+        this.x509CRL = x509CRL;
+    }
+}
Index: juddi-core/src/main/java/org/apache/juddi/model/Publisher.java
===================================================================
--- juddi-core/src/main/java/org/apache/juddi/model/Publisher.java	(revision 1355564)
+++ juddi-core/src/main/java/org/apache/juddi/model/Publisher.java	(working copy)
@@ -15,8 +15,14 @@
  * limitations under the License.
  */
 
+import java.util.ArrayList;
+import java.util.List;
+import javax.persistence.CascadeType;
 import javax.persistence.Column;
 import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.OneToMany;
+import javax.persistence.OrderBy;
 import javax.persistence.Table;
 import javax.persistence.Transient;
 
@@ -38,6 +44,7 @@
 	private Integer maxServicesPerBusiness;
 	private Integer maxBindingsPerService;
 	private Integer maxTmodels;
+        private List<Signature> signatures = new ArrayList<Signature>(0);
 
 	public Publisher() {
 		super(null);
@@ -150,4 +157,13 @@
 		this.maxTmodels = maxTmodels;
 	}
 
+        @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "publisher")
+	@OrderBy
+        public List<Signature> getSignatures() {
+                return signatures;
+        }
+
+        public void setSignatures(List<Signature> signatures) {
+                this.signatures = signatures;
+        }
 }
Index: juddi-core/src/main/java/org/apache/juddi/model/BindingTemplate.java
===================================================================
--- juddi-core/src/main/java/org/apache/juddi/model/BindingTemplate.java	(revision 1355564)
+++ juddi-core/src/main/java/org/apache/juddi/model/BindingTemplate.java	(working copy)
@@ -47,6 +47,7 @@
 	private String hostingRedirector;
 	private BindingCategoryBag categoryBag;
 	private List<TmodelInstanceInfo> tmodelInstanceInfos = new ArrayList<TmodelInstanceInfo>(0);
+        private List<Signature> signatures = new ArrayList<Signature>(0);
 	
 	public BindingTemplate() {
 	}
@@ -131,4 +132,14 @@
 	public void setBindingDescrs(List<BindingDescr> bindingDescrs) {
 		this.bindingDescrs = bindingDescrs;
 	}
+        
+        @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "bindingTemplate")
+	@OrderBy
+        public List<Signature> getSignatures() {
+                return signatures;
+        }
+
+        public void setSignatures(List<Signature> signatures) {
+                this.signatures = signatures;
+        }
 }
Index: juddi-core/src/main/java/org/apache/juddi/model/ObjectType.java
===================================================================
--- juddi-core/src/main/java/org/apache/juddi/model/ObjectType.java	(revision 0)
+++ juddi-core/src/main/java/org/apache/juddi/model/ObjectType.java	(revision 0)
@@ -0,0 +1,103 @@
+/*
+ * Copyright 2012 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.juddi.model;
+
+import java.util.List;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToMany;
+import javax.persistence.OrderBy;
+import javax.persistence.Table;
+
+/**
+ *
+ */
+@Entity
+@Table(name="j3_object_type")
+public class ObjectType implements java.io.Serializable {
+    private static final long serialVersionUID = -3233157941119408716L;
+    
+    private Long id;
+    private Signature signature;
+    private List<ObjectTypeContent> content;
+    private String xmlID;
+    private String mimeType;
+    private String encoding;
+    
+    @Id
+    @GeneratedValue(strategy=GenerationType.AUTO)
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    @ManyToOne(fetch = FetchType.LAZY)
+    @JoinColumn(name = "signature_key", nullable = false)
+    public Signature getSignature() {
+        return signature;
+    }
+
+    public void setSignature(Signature signature) {
+        this.signature = signature;
+    }
+    
+    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "objectType")
+    @OrderBy
+    public List<ObjectTypeContent> getContent() {
+        return content;
+    }
+
+    public void setContent(List<ObjectTypeContent> content) {
+        this.content = content;
+    }
+
+    @Column(name="xml_id")
+    public String getXmlID() {
+        return xmlID;
+    }
+
+    public void setXmlID(String xmlID) {
+        this.xmlID = xmlID;
+    }
+
+    @Column(name="mime_type")
+    public String getMimeType() {
+        return mimeType;
+    }
+
+    public void setMimeType(String mimeType) {
+        this.mimeType = mimeType;
+    }
+
+    @Column(name="encoding")
+    public String getEncoding() {
+        return encoding;
+    }
+
+    public void setEncoding(String encoding) {
+        this.encoding = encoding;
+    }
+}
Index: juddi-core/src/main/java/org/apache/juddi/model/X509SKI.java
===================================================================
--- juddi-core/src/main/java/org/apache/juddi/model/X509SKI.java	(revision 0)
+++ juddi-core/src/main/java/org/apache/juddi/model/X509SKI.java	(revision 0)
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2012 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.juddi.model;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.Lob;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+/**
+ *
+ */
+@Entity
+@Table(name="j3_x509_ski")
+public class X509SKI implements java.io.Serializable {
+    private static final long serialVersionUID = -6353389848796421617L;
+    
+    private Long id;
+    private X509KeyInfo x509KeyInfo;
+    private byte[] content;
+    
+    @Id
+    @GeneratedValue(strategy=GenerationType.AUTO)
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+    
+    @ManyToOne(fetch = FetchType.LAZY)
+    @JoinColumn(name = "x509_key_info_key", nullable = false)
+    public X509KeyInfo getX509KeyInfo() {
+        return x509KeyInfo;
+    }
+
+    public void setX509KeyInfo(X509KeyInfo x509KeyInfo) {
+        this.x509KeyInfo = x509KeyInfo;
+    }
+    
+    @Lob
+    @Column(name="content")
+    public byte[] getContent() {
+        return content;
+    }
+
+    public void setContent(byte[] content) {
+        this.content = content;
+    }
+}
Index: juddi-core/src/main/java/org/apache/juddi/model/PublisherAssertion.java
===================================================================
--- juddi-core/src/main/java/org/apache/juddi/model/PublisherAssertion.java	(revision 1355564)
+++ juddi-core/src/main/java/org/apache/juddi/model/PublisherAssertion.java	(working copy)
@@ -15,14 +15,19 @@
  * limitations under the License.
  */
 
+import java.util.ArrayList;
+import java.util.List;
 import javax.persistence.AttributeOverride;
 import javax.persistence.AttributeOverrides;
+import javax.persistence.CascadeType;
 import javax.persistence.Column;
 import javax.persistence.EmbeddedId;
 import javax.persistence.Entity;
 import javax.persistence.FetchType;
 import javax.persistence.JoinColumn;
 import javax.persistence.ManyToOne;
+import javax.persistence.OneToMany;
+import javax.persistence.OrderBy;
 import javax.persistence.Table;
 
 /**
@@ -139,5 +144,4 @@
 	public void setToCheck(String toCheck) {
 		this.toCheck = toCheck;
 	}
-
 }
Index: juddi-core/src/main/java/org/apache/juddi/model/SignatureValue.java
===================================================================
--- juddi-core/src/main/java/org/apache/juddi/model/SignatureValue.java	(revision 0)
+++ juddi-core/src/main/java/org/apache/juddi/model/SignatureValue.java	(revision 0)
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2012 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.juddi.model;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Lob;
+import javax.persistence.Table;
+
+/**
+ *
+ */
+@Entity
+@Table(name="j3_signature_value")
+public class SignatureValue implements java.io.Serializable {
+    private static final long serialVersionUID = -3233157941119408717L;
+    
+    private Long id;
+    private byte[] value;
+    private String xmlID;
+
+    @Id
+    @GeneratedValue(strategy=GenerationType.AUTO)
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    @Column(name="value_bytes")
+    @Lob
+    public byte[] getValue() {
+        return value;
+    }
+
+    public void setValue(byte[] value) {
+        this.value = value;
+    }
+
+    @Column(name="xml_id")
+    public String getXmlID() {
+        return xmlID;
+    }
+
+    public void setXmlID(String xmlID) {
+        this.xmlID = xmlID;
+    }
+}
Index: juddi-core/src/main/java/org/apache/juddi/model/Reference.java
===================================================================
--- juddi-core/src/main/java/org/apache/juddi/model/Reference.java	(revision 0)
+++ juddi-core/src/main/java/org/apache/juddi/model/Reference.java	(revision 0)
@@ -0,0 +1,125 @@
+/*
+ * Copyright 2012 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.juddi.model;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.Lob;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToMany;
+import javax.persistence.OrderBy;
+import javax.persistence.Table;
+
+/**
+ *
+ */
+@Entity
+@Table(name="j3_reference")
+public class Reference {
+    private static final long serialVersionUID = -3233157941119408701L;
+    
+    private Long id;
+    private SignedInfo signedInfo;
+    private List<SignatureTransform> transforms = new ArrayList<SignatureTransform>(0);
+    private String digestMethod;
+    private byte[] digestValue;
+    private String xmlID;
+    private String uri;
+    private String type;
+    
+    @Id
+    @GeneratedValue(strategy=GenerationType.AUTO)
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    @ManyToOne(fetch = FetchType.LAZY)
+    @JoinColumn(name = "signed_info_key", nullable = false)
+    public SignedInfo getSignedInfo() {
+        return signedInfo;
+    }
+
+    public void setSignedInfo(SignedInfo signedInfo) {
+        this.signedInfo = signedInfo;
+    }
+    
+    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "reference")
+    @OrderBy
+    public List<SignatureTransform> getTransforms() {
+        return transforms;
+    }
+
+    public void setTransforms(List<SignatureTransform> transforms) {
+        this.transforms = transforms;
+    }
+
+    @Column(name="digest_method")
+    public String getDigestMethod() {
+        return digestMethod;
+    }
+
+    public void setDigestMethod(String digestMethod) {
+        this.digestMethod = digestMethod;
+    }
+
+    @Lob
+    @Column(name="digest_value")
+    public byte[] getDigestValue() {
+        return digestValue;
+    }
+
+    public void setDigestValue(byte[] digestValue) {
+        this.digestValue = digestValue;
+    }
+
+    @Column(name="uri")
+    public String getUri() {
+        return uri;
+    }
+
+    public void setUri(String uri) {
+        this.uri = uri;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+    
+    @Column(name="xml_id")
+    public String getXmlID() {
+        return xmlID;
+    }
+
+    public void setXmlID(String xmlID) {
+        this.xmlID = xmlID;
+    }
+}
Index: juddi-core/src/main/java/org/apache/juddi/model/X509CRL.java
===================================================================
--- juddi-core/src/main/java/org/apache/juddi/model/X509CRL.java	(revision 0)
+++ juddi-core/src/main/java/org/apache/juddi/model/X509CRL.java	(revision 0)
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2012 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.juddi.model;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.Lob;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+/**
+ *
+ */
+@Entity
+@Table(name="j3_x509_crl")
+public class X509CRL implements java.io.Serializable {
+    private static final long serialVersionUID = -6353389848796421614L;
+    
+    private Long id;
+    private X509KeyInfo x509KeyInfo;
+    private byte[] content;
+    
+    @Id
+    @GeneratedValue(strategy=GenerationType.AUTO)
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }    
+
+    @ManyToOne(fetch = FetchType.LAZY)
+    @JoinColumn(name = "x509_key_info_key", nullable = false)
+    public X509KeyInfo getX509KeyInfo() {
+        return x509KeyInfo;
+    }
+
+    public void setX509KeyInfo(X509KeyInfo x509KeyInfo) {
+        this.x509KeyInfo = x509KeyInfo;
+    }
+    
+    @Lob
+    @Column(name="content")
+    public byte[] getContent() {
+        return content;
+    }
+
+    public void setContent(byte[] content) {
+        this.content = content;
+    }
+}
Index: juddi-core/src/main/java/org/apache/juddi/model/X509Certificate.java
===================================================================
--- juddi-core/src/main/java/org/apache/juddi/model/X509Certificate.java	(revision 0)
+++ juddi-core/src/main/java/org/apache/juddi/model/X509Certificate.java	(revision 0)
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2012 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.juddi.model;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.Lob;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+/**
+ *
+ */
+@Entity
+@Table(name="j3_x509_cert")
+public class X509Certificate implements java.io.Serializable {
+    private static final long serialVersionUID = -6353389848796421615L;
+    
+    private Long id;
+    private X509KeyInfo x509KeyInfo;
+    private byte[] content;
+    
+    @Id
+    @GeneratedValue(strategy=GenerationType.AUTO)
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+    
+    @ManyToOne(fetch = FetchType.LAZY)
+    @JoinColumn(name = "x509_key_info_key", nullable = false)
+    public X509KeyInfo getX509KeyInfo() {
+        return x509KeyInfo;
+    }
+
+    public void setX509KeyInfo(X509KeyInfo x509KeyInfo) {
+        this.x509KeyInfo = x509KeyInfo;
+    }
+    
+    @Lob
+    @Column(name="content")
+    public byte[] getContent() {
+        return content;
+    }
+
+    public void setContent(byte[] content) {
+        this.content = content;
+    }
+}
Index: juddi-core/src/main/java/org/apache/juddi/model/BusinessService.java
===================================================================
--- juddi-core/src/main/java/org/apache/juddi/model/BusinessService.java	(revision 1355564)
+++ juddi-core/src/main/java/org/apache/juddi/model/BusinessService.java	(working copy)
@@ -43,7 +43,8 @@
 	private List<ServiceDescr> serviceDescrs = new ArrayList<ServiceDescr>(0);
 	private List<BindingTemplate> bindingTemplates = new ArrayList<BindingTemplate>(0);
 	private ServiceCategoryBag categoryBag;
-    private List<ServiceProjection> projectingBusinesses = new ArrayList<ServiceProjection>(0);
+        private List<ServiceProjection> projectingBusinesses = new ArrayList<ServiceProjection>(0);
+        private List<Signature> signatures = new ArrayList<Signature>(0);
 
 	public BusinessService() {
 	}
@@ -117,4 +118,14 @@
 	public void setProjectingBusinesses(List<ServiceProjection> projectingBusinesses) {
 		this.projectingBusinesses = projectingBusinesses;
 	}
+        
+        @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "businessService")
+	@OrderBy
+        public List<Signature> getSignatures() {
+                return signatures;
+        }
+
+        public void setSignatures(List<Signature> signatures) {
+                this.signatures = signatures;
+        }
 }
Index: juddi-core/src/main/java/org/apache/juddi/model/Tmodel.java
===================================================================
--- juddi-core/src/main/java/org/apache/juddi/model/Tmodel.java	(revision 1355564)
+++ juddi-core/src/main/java/org/apache/juddi/model/Tmodel.java	(working copy)
@@ -45,6 +45,7 @@
 	private List<TmodelDescr> tmodelDescrs = new ArrayList<TmodelDescr>(0);
 	private List<TmodelIdentifier> tmodelIdentifiers = new ArrayList<TmodelIdentifier>(0);
 	private TmodelCategoryBag categoryBag;
+        private List<Signature> signatures = new ArrayList<Signature>(0);
 
 	public Tmodel() {
 	}
@@ -132,4 +133,13 @@
 		this.categoryBag = categoryBag;
 	}
 
+        @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "tmodel")
+	@OrderBy
+        public List<Signature> getSignatures() {
+                return signatures;
+        }
+
+        public void setSignatures(List<Signature> signatures) {
+                this.signatures = signatures;
+        }
 }
Index: juddi-core/src/main/java/org/apache/juddi/model/SignatureTransform.java
===================================================================
--- juddi-core/src/main/java/org/apache/juddi/model/SignatureTransform.java	(revision 0)
+++ juddi-core/src/main/java/org/apache/juddi/model/SignatureTransform.java	(revision 0)
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2012 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.juddi.model;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+/**
+ *
+ */
+@Entity
+@Table(name="j3_signature_transform")
+public class SignatureTransform implements java.io.Serializable {
+    private static final long serialVersionUID = -3233157941119408702L;
+    
+    private Long id;
+    private Reference reference;
+    private String transform;
+    
+    @Id
+    @GeneratedValue(strategy=GenerationType.AUTO)
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    @ManyToOne(fetch = FetchType.LAZY)
+    @JoinColumn(name = "reference_key", nullable = false)
+    public Reference getReference() {
+        return reference;
+    }
+
+    public void setReference(Reference reference) {
+        this.reference = reference;
+    }
+
+    @Column(name="transform")
+    public String getTransform() {
+        return transform;
+    }
+
+    public void setTransform(String transform) {
+        this.transform = transform;
+    }
+    
+    
+}
Index: juddi-core/src/main/java/org/apache/juddi/model/Signature.java
===================================================================
--- juddi-core/src/main/java/org/apache/juddi/model/Signature.java	(revision 0)
+++ juddi-core/src/main/java/org/apache/juddi/model/Signature.java	(revision 0)
@@ -0,0 +1,160 @@
+/*
+ * Copyright 2012 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.juddi.model;
+
+import java.util.List;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToMany;
+import javax.persistence.OrderBy;
+import javax.persistence.Table;
+
+/**
+ *
+ */
+@Entity
+@Table(name = "j3_signature")
+public class Signature implements java.io.Serializable {
+    private static final long serialVersionUID = -3233157941119408718L;
+    
+    private Long id;
+    private SignedInfo signedInfo;
+    private SignatureValue signatureValue;
+    private KeyInfo keyInfo;
+    private List<ObjectType> object;
+    private BusinessEntity businessEntity;
+    private BusinessService businessService;
+    private Publisher publisher;
+    private BindingTemplate bindingTemplate;
+    private Tmodel tmodel;
+    private String xmlID;
+
+    @Id
+    @GeneratedValue(strategy=GenerationType.AUTO)
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    @ManyToOne
+    @JoinColumn(name = "binding_template_key", nullable = true)
+    public BindingTemplate getBindingTemplate() {
+        return bindingTemplate;
+    }
+
+    public void setBindingTemplate(BindingTemplate bindingTemplate) {
+        this.bindingTemplate = bindingTemplate;
+    }
+
+    @ManyToOne
+    @JoinColumn(name = "tmodel_key", nullable = true)
+    public Tmodel getTmodel() {
+        return tmodel;
+    }
+
+    public void setTmodel(Tmodel tmodel) {
+        this.tmodel = tmodel;
+    }
+    
+    @ManyToOne
+    @JoinColumn(name = "publisher_key", nullable = true)
+    public Publisher getPublisher() {
+        return publisher;
+    }
+
+    public void setPublisher(Publisher publisher) {
+        this.publisher = publisher;
+    }
+    
+    @ManyToOne
+    @JoinColumn(name = "business_service_key", nullable = true)
+    public BusinessService getBusinessService() {
+        return businessService;
+    }
+
+    public void setBusinessService(BusinessService businessService) {
+        this.businessService = businessService;
+    }
+    
+    @ManyToOne
+    @JoinColumn(name = "business_key", nullable = true)
+    public BusinessEntity getBusinessEntity() {
+        return businessEntity;
+    }
+
+    public void setBusinessEntity(BusinessEntity businessEntity) {
+        this.businessEntity = businessEntity;
+    }
+
+    @ManyToOne(fetch = FetchType.LAZY, cascade=CascadeType.ALL)
+    @JoinColumn(name = "signed_info", nullable = false)
+    public SignedInfo getSignedInfo() {
+        return signedInfo;
+    }
+
+    public void setSignedInfo(SignedInfo signedInfo) {
+        this.signedInfo = signedInfo;
+    }
+
+    @ManyToOne(fetch = FetchType.LAZY, cascade=CascadeType.ALL)
+    @JoinColumn(name = "signature_value", nullable = false)
+    public SignatureValue getSignatureValue() {
+        return signatureValue;
+    }
+
+    public void setSignatureValue(SignatureValue signatureValue) {
+        this.signatureValue = signatureValue;
+    }
+
+    @ManyToOne(fetch = FetchType.LAZY, cascade=CascadeType.ALL)
+    @JoinColumn(name = "key_info", nullable = false)
+    public KeyInfo getKeyInfo() {
+        return keyInfo;
+    }
+
+    public void setKeyInfo(KeyInfo keyInfo) {
+        this.keyInfo = keyInfo;
+    }
+
+    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "signature")
+    @OrderBy
+    public List<ObjectType> getObject() {
+        return object;
+    }
+
+    public void setObject(List<ObjectType> object) {
+        this.object = object;
+    }
+
+    @Column(name="xml_id")
+    public String getXmlID() {
+        return xmlID;
+    }
+
+    public void setXmlID(String xmlID) {
+        this.xmlID = xmlID;
+    }
+}
Index: juddi-core/src/main/java/org/apache/juddi/model/SignatureMethod.java
===================================================================
--- juddi-core/src/main/java/org/apache/juddi/model/SignatureMethod.java	(revision 0)
+++ juddi-core/src/main/java/org/apache/juddi/model/SignatureMethod.java	(revision 0)
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2012 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.juddi.model;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+/**
+ *
+ */
+@Entity
+@Table(name="j3_signature_method")
+public class SignatureMethod {
+    private Long id;
+    private String algorithm;
+    
+    @Id
+    @GeneratedValue(strategy=GenerationType.AUTO)
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    @Column(name="algorithm")
+    public String getAlgorithm() {
+        return algorithm;
+    }
+
+    public void setAlgorithm(String algorithm) {
+        this.algorithm = algorithm;
+    }
+}
Index: juddi-core/src/main/java/org/apache/juddi/model/ObjectTypeContent.java
===================================================================
--- juddi-core/src/main/java/org/apache/juddi/model/ObjectTypeContent.java	(revision 0)
+++ juddi-core/src/main/java/org/apache/juddi/model/ObjectTypeContent.java	(revision 0)
@@ -0,0 +1,68 @@
+/*
+ * Copyright 2012 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.juddi.model;
+
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.Lob;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+/**
+ *
+ */
+@Entity
+@Table(name="j3_object_type_content")
+public class ObjectTypeContent implements java.io.Serializable {
+    private static final long serialVersionUID = -3233157941119408715L;
+    
+    private Long id;
+    private ObjectType objectType;
+    private byte[] content;
+    
+    @Id
+    @GeneratedValue(strategy=GenerationType.AUTO)
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    @ManyToOne(fetch = FetchType.LAZY)
+    @JoinColumn(name = "object_type_key", nullable = false)
+    public ObjectType getObjectType() {
+        return objectType;
+    }
+
+    public void setObjectType(ObjectType objectType) {
+        this.objectType = objectType;
+    }
+    
+    @Lob
+    public byte[] getContent() {
+        return content;
+    }
+    
+    public void setContent(byte[] content) {
+        this.content = content;
+    }
+}
Index: juddi-core/src/main/java/org/apache/juddi/model/KeyInfo.java
===================================================================
--- juddi-core/src/main/java/org/apache/juddi/model/KeyInfo.java	(revision 0)
+++ juddi-core/src/main/java/org/apache/juddi/model/KeyInfo.java	(revision 0)
@@ -0,0 +1,71 @@
+/*
+ * Copyright 2012 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.juddi.model;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+import javax.persistence.OrderBy;
+import javax.persistence.Table;
+
+/**
+ *
+ */
+@Entity
+@Table(name="j3_key_info")
+public class KeyInfo implements java.io.Serializable {
+    private static final long serialVersionUID = -7353389848796421615L;
+
+    private Long id;
+    private List<X509KeyInfo> x509KeyInfo = new ArrayList<X509KeyInfo>(0);
+    private String xmlID;
+    
+    @Id
+    @GeneratedValue(strategy=GenerationType.AUTO)
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "keyInfo")
+    @OrderBy
+    public List<X509KeyInfo> getX509KeyInfo() {
+        return x509KeyInfo;
+    }
+
+    public void setX509KeyInfo(List<X509KeyInfo> x509KeyInfo) {
+        this.x509KeyInfo = x509KeyInfo;
+    }
+    
+    @Column(name="xml_id")
+    public String getXmlID() {
+        return xmlID;
+    }
+
+    public void setXmlID(String xmlID) {
+        this.xmlID = xmlID;
+    }
+}
Index: juddi-core/src/main/java/org/apache/juddi/model/SignedInfo.java
===================================================================
--- juddi-core/src/main/java/org/apache/juddi/model/SignedInfo.java	(revision 0)
+++ juddi-core/src/main/java/org/apache/juddi/model/SignedInfo.java	(revision 0)
@@ -0,0 +1,95 @@
+/*
+ * Copyright 2012 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.juddi.model;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToMany;
+import javax.persistence.OrderBy;
+import javax.persistence.Table;
+
+/**
+ *
+ */
+@Entity
+@Table(name="j3_signed_info")
+public class SignedInfo implements java.io.Serializable {
+    private static final long serialVersionUID = -2233157941119408719L;
+    
+    private Long id;
+    private CanonicalizationMethod canonicalizationMethod;
+    private SignatureMethod signatureMethod;
+    private List<Reference> reference = new ArrayList<Reference>(0);
+    private String xmlID;
+
+    @Id
+    @GeneratedValue(strategy=GenerationType.AUTO)
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+    
+    @ManyToOne(fetch = FetchType.LAZY, cascade=CascadeType.ALL)
+    @JoinColumn(name = "canonicalization_method", nullable = false)
+    public CanonicalizationMethod getCanonicalizationMethod() {
+        return canonicalizationMethod;
+    }
+
+    public void setCanonicalizationMethod(CanonicalizationMethod canonicalizationMethod) {
+        this.canonicalizationMethod = canonicalizationMethod;
+    }
+
+    @ManyToOne(fetch = FetchType.LAZY, cascade=CascadeType.ALL)
+    @JoinColumn(name = "signature_method", nullable = false)
+    public SignatureMethod getSignatureMethod() {
+        return signatureMethod;
+    }
+
+    public void setSignatureMethod(SignatureMethod signatureMethod) {
+        this.signatureMethod = signatureMethod;
+    }
+
+    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "signedInfo")
+    @OrderBy
+    public List<Reference> getReference() {
+        return reference;
+    }
+
+    public void setReference(List<Reference> reference) {
+        this.reference = reference;
+    }
+
+    @Column(name="xml_id")
+    public String getXmlID() {
+        return xmlID;
+    }
+
+    public void setXmlID(String xmlID) {
+        this.xmlID = xmlID;
+    }
+}
Index: juddi-core/src/main/java/org/apache/juddi/model/CanonicalizationMethod.java
===================================================================
--- juddi-core/src/main/java/org/apache/juddi/model/CanonicalizationMethod.java	(revision 0)
+++ juddi-core/src/main/java/org/apache/juddi/model/CanonicalizationMethod.java	(revision 0)
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2012 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.juddi.model;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+/**
+ *
+ * @author jsightler
+ */
+@Entity
+@Table(name="j3_canonicalization_method")
+public class CanonicalizationMethod {
+    private Long id;
+    private String algorithm;
+    
+    @Id
+    @GeneratedValue(strategy=GenerationType.AUTO)
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    @Column(name="algorithm")
+    public String getAlgorithm() {
+        return algorithm;
+    }
+
+    public void setAlgorithm(String algorithm) {
+        this.algorithm = algorithm;
+    }
+}
Index: juddi-core/src/main/java/org/apache/juddi/config/Release.java
===================================================================
--- juddi-core/src/main/java/org/apache/juddi/config/Release.java	(revision 1355564)
+++ juddi-core/src/main/java/org/apache/juddi/config/Release.java	(working copy)
@@ -20,7 +20,7 @@
  * in main/java/resources/version
  */
 public class Release {
-	private static final String REGISTRY_VERSION = "3.1.3-SNAPSHOT";
+	private static final String REGISTRY_VERSION = "3.1.3";
 	private static final String UDDI_VERSION = "3.0";
    
 	private Release () {
Index: juddi-core/src/main/java/org/apache/juddi/mapping/MappingApiToModel.java
===================================================================
--- juddi-core/src/main/java/org/apache/juddi/mapping/MappingApiToModel.java	(revision 1355564)
+++ juddi-core/src/main/java/org/apache/juddi/mapping/MappingApiToModel.java	(working copy)
@@ -17,20 +17,43 @@
 
 package org.apache.juddi.mapping;
 
+import com.sun.media.sound.ModelAbstractChannelMixer;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.GregorianCalendar;
 import java.util.List;
+import javax.xml.bind.JAXBElement;
 
 import javax.xml.bind.JAXBException;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.juddi.jaxb.JAXBMarshaller;
+import org.apache.juddi.model.BindingTemplate;
+import org.apache.juddi.model.BusinessService;
+import org.apache.juddi.model.CanonicalizationMethod;
+import org.apache.juddi.model.KeyInfo;
+import org.apache.juddi.model.Publisher;
+import org.apache.juddi.model.PublisherAssertion;
+import org.apache.juddi.model.Reference;
+import org.apache.juddi.model.Signature;
+import org.apache.juddi.model.SignatureMethod;
+import org.apache.juddi.model.SignatureTransform;
+import org.apache.juddi.model.SignatureValue;
+import org.apache.juddi.model.SignedInfo;
+import org.apache.juddi.model.Tmodel;
+import org.apache.juddi.model.X509CRL;
+import org.apache.juddi.model.X509Certificate;
+import org.apache.juddi.model.X509KeyInfo;
+import org.apache.juddi.model.X509SKI;
+import org.apache.juddi.model.X509SubjectName;
 import org.apache.juddi.v3.error.ErrorMessage;
 import org.apache.juddi.v3.error.FatalErrorException;
 import org.uddi.api_v3.Description;
 import org.uddi.sub_v3.ObjectFactory;
 import org.uddi.v3_service.DispositionReportFaultMessage;
+import org.w3._2000._09.xmldsig_.X509DataType;
+import org.w3._2000._09.xmldsig_.X509IssuerSerialType;
 
 
 /**
@@ -55,6 +78,7 @@
 		modelPublisher.setMaxBusinesses(apiPublisher.getMaxBusinesses());
 		modelPublisher.setMaxServicesPerBusiness(apiPublisher.getMaxServicePerBusiness());
 		modelPublisher.setMaxTmodels(apiPublisher.getMaxTModels());
+                mapPublisherSignatures(apiPublisher.getSignature(), modelPublisher);
 	}
 	
 	public static void mapBusinessEntity(org.uddi.api_v3.BusinessEntity apiBusinessEntity, 
@@ -77,9 +101,178 @@
 							modelBusinessEntity.getBusinessServices(), 
 							modelBusinessEntity.getServiceProjections(), 
 							modelBusinessEntity);
+                
+                mapBusinessSignature(apiBusinessEntity.getSignature(), modelBusinessEntity);
 	}
-	
+        
+        private static List<Signature> mapApiSignaturesToModelSignatures(List<org.w3._2000._09.xmldsig_.SignatureType> apiSignatures) 
+				   throws DispositionReportFaultMessage {
+            List<Signature> modelSignatures = new ArrayList<Signature>();
+            modelSignatures.clear();
+            for (org.w3._2000._09.xmldsig_.SignatureType signatureType : apiSignatures) {
+                Signature modelSignature = new Signature();
+                
+                org.w3._2000._09.xmldsig_.SignedInfoType apiSignedInfo = signatureType.getSignedInfo();
+                SignedInfo modelSignedInfo = new SignedInfo();
+                modelSignature.setSignedInfo(modelSignedInfo);
+                
+                String canonicalizationAlgMethod = apiSignedInfo.getCanonicalizationMethod().getAlgorithm();
+                CanonicalizationMethod modelCanonMethod = new CanonicalizationMethod();
+                modelSignedInfo.setCanonicalizationMethod(modelCanonMethod);
+                modelCanonMethod.setAlgorithm(canonicalizationAlgMethod);
+                
+                SignatureMethod modelSigMethod = new SignatureMethod();
+                modelSignedInfo.setSignatureMethod(modelSigMethod);
+                String sigMethod = apiSignedInfo.getSignatureMethod().getAlgorithm();
+                modelSigMethod.setAlgorithm(sigMethod);
+                
+                List<org.w3._2000._09.xmldsig_.ReferenceType> apiReferenceList = apiSignedInfo.getReference();
+                for (org.w3._2000._09.xmldsig_.ReferenceType apiReference : apiReferenceList) {
+                    Reference ref = new Reference();
+                    ref.setSignedInfo(modelSignedInfo);
+                    
+                    String refUri = apiReference.getURI();
+                    if (refUri == null) {
+                        refUri = "";
+                    }
+                    ref.setUri(refUri);
+                    
+                    List<org.w3._2000._09.xmldsig_.TransformType> apiTransformList = apiReference.getTransforms().getTransform();
+                    for (org.w3._2000._09.xmldsig_.TransformType apiTransform : apiTransformList) {
+                        SignatureTransform modelTransform = new SignatureTransform();
+                        modelTransform.setReference(ref);
+                        modelTransform.setTransform(apiTransform.getAlgorithm());
+                        ref.getTransforms().add(modelTransform);
+                    }
+                    
+                    String digestMethodStr = apiReference.getDigestMethod().getAlgorithm();
+                    byte[] digestValueBytes = apiReference.getDigestValue();
+                    
+                    ref.setDigestMethod(digestMethodStr);
+                    ref.setDigestValue(digestValueBytes);
+                    
+                    modelSignedInfo.getReference().add(ref);
+                }
+                
+                modelSignedInfo.setCanonicalizationMethod(modelCanonMethod);
+                
+                org.w3._2000._09.xmldsig_.SignatureValueType apiSignatureValue = signatureType.getSignatureValue();
+                SignatureValue modelSignatureValue = new SignatureValue();
+                byte[] signatureValueBytes = apiSignatureValue.getValue();
+                String signatureValueXmlID = apiSignatureValue.getId();
+                modelSignatureValue.setValue(signatureValueBytes);
+                modelSignatureValue.setXmlID(signatureValueXmlID);
+                modelSignature.setSignatureValue(modelSignatureValue);
+                
+                org.w3._2000._09.xmldsig_.KeyInfoType apiKeyInfo = signatureType.getKeyInfo();
+                String apiKeyInfoXmlID = apiKeyInfo.getId();
+                KeyInfo modelKeyInfo = new KeyInfo();
+                modelSignature.setKeyInfo(modelKeyInfo);
+                modelKeyInfo.setXmlID(apiKeyInfoXmlID);
+                
+                List<Object> apiKeyInfoContentList = apiKeyInfo.getContent();
+                List<X509KeyInfo> x509KeyInfoList = modelKeyInfo.getX509KeyInfo();
+                for (Object apiKeyInfoContentObj : apiKeyInfoContentList) {
+                    if (apiKeyInfoContentObj instanceof JAXBElement) {
+                        JAXBElement apiKeyInfoContentJAXB = (JAXBElement)apiKeyInfoContentObj;
+                        if (apiKeyInfoContentJAXB.getValue() instanceof X509DataType) {
+                            X509DataType apiKeyInfoContent = (X509DataType)apiKeyInfoContentJAXB.getValue();
+                            X509KeyInfo modelX509KeyInfo = new X509KeyInfo();
+                            modelX509KeyInfo.setKeyInfo(modelKeyInfo);
 
+                            List<Object> x509IssuerSerialOrX509SKIOrX509SubjectNameList = apiKeyInfoContent.getX509IssuerSerialOrX509SKIOrX509SubjectName();
+                            for (Object x509IssuerSerialOrX509SKIOrX509SubjectNameObj : x509IssuerSerialOrX509SKIOrX509SubjectNameList) {
+                                JAXBElement x509IssuerSerialOrX509SKIOrX509SubjectNameJAXB = (JAXBElement)x509IssuerSerialOrX509SKIOrX509SubjectNameObj;
+                                String tagName = x509IssuerSerialOrX509SKIOrX509SubjectNameJAXB.getName().getLocalPart();
+                                Object x509IssuerSerialOrX509SKIOrX509SubjectName = x509IssuerSerialOrX509SKIOrX509SubjectNameJAXB.getValue();
+                                if ("X509Certificate".equals(tagName)) {
+                                    byte[] contents = (byte[])x509IssuerSerialOrX509SKIOrX509SubjectName;
+                                    X509Certificate modelX509Cert = new X509Certificate();
+                                    modelX509Cert.setContent(contents);
+                                    modelX509Cert.setX509KeyInfo(modelX509KeyInfo);
+                                    modelX509KeyInfo.getX509Certificate().add(modelX509Cert);
+                                } else if ("X509SKI".equals(tagName)) {
+                                    byte[] contents = (byte[])x509IssuerSerialOrX509SKIOrX509SubjectName;
+                                    X509SKI modelX509SKI = new X509SKI();
+                                    modelX509SKI.setContent(contents);
+                                    modelX509SKI.setX509KeyInfo(modelX509KeyInfo);
+                                    modelX509KeyInfo.getX509SKI().add(modelX509SKI);
+                                } else if ("X509CRL".equals(tagName)) {    
+                                    byte[] contents = (byte[])x509IssuerSerialOrX509SKIOrX509SubjectName;
+                                    X509CRL modelX509CRL = new X509CRL();
+                                    modelX509CRL.setContent(contents);
+                                    modelX509CRL.setX509KeyInfo(modelX509KeyInfo);
+                                    modelX509CRL.setX509KeyInfo(modelX509KeyInfo);
+                                    modelX509KeyInfo.getX509CRL().add(modelX509CRL);
+                                } else if ("X509IssuerSerial".equals(tagName)) {    
+                                    // NOT YET IMPLEMENTED
+                                } else if ("X509SubjectName".equals(tagName)) {
+                                    String val = (String)x509IssuerSerialOrX509SKIOrX509SubjectName;
+                                    X509SubjectName modelX509SubjectName = new X509SubjectName();
+                                    modelX509SubjectName.setContent(val);
+                                    modelX509SubjectName.setX509KeyInfo(modelX509KeyInfo);
+                                    modelX509KeyInfo.getX509SubjectName().add(modelX509SubjectName);
+                                } else {
+                                    throw new RuntimeException("Unrecognized type: " + x509IssuerSerialOrX509SKIOrX509SubjectName.getClass().getName() + ", tag: " + tagName + ", value: " + x509IssuerSerialOrX509SKIOrX509SubjectName);
+                                }
+                            }
+                            x509KeyInfoList.add(modelX509KeyInfo);
+                        }
+                    }
+                }
+                
+                
+                modelSignatures.add(modelSignature);
+            }
+            return modelSignatures;
+        }
+        
+        public static void mapBusinessServiceSignature (List<org.w3._2000._09.xmldsig_.SignatureType> apiSignatures, BusinessService modelBusinessService)
+				   throws DispositionReportFaultMessage {
+            List<Signature> modelSignatures = mapApiSignaturesToModelSignatures(apiSignatures);
+            for (Signature modelSignature : modelSignatures) {
+                modelSignature.setBusinessService(modelBusinessService);
+            }
+            modelBusinessService.setSignatures(modelSignatures);
+        }
+        
+        public static void mapTmodelSignatures(List<org.w3._2000._09.xmldsig_.SignatureType> apiSignatures, Tmodel modelTmodel)
+				   throws DispositionReportFaultMessage {
+            List<Signature> modelSignatures = mapApiSignaturesToModelSignatures(apiSignatures);
+            for (Signature modelSignature : modelSignatures) {
+                modelSignature.setTmodel(modelTmodel);
+            }
+            modelTmodel.setSignatures(modelSignatures);
+        }
+        
+        public static void mapBindingTemplateSignatures(List<org.w3._2000._09.xmldsig_.SignatureType> apiSignatures, BindingTemplate modelBindingTemplate)
+				   throws DispositionReportFaultMessage {
+            List<Signature> modelSignatures = mapApiSignaturesToModelSignatures(apiSignatures);
+            for (Signature modelSignature : modelSignatures) {
+                modelSignature.setBindingTemplate(modelBindingTemplate);
+            }
+            modelBindingTemplate.setSignatures(modelSignatures);
+        }
+        
+        public static void mapPublisherSignatures(List<org.w3._2000._09.xmldsig_.SignatureType> apiSignatures, Publisher modelPublisher)
+				   throws DispositionReportFaultMessage {
+            List<Signature> modelSignatures = mapApiSignaturesToModelSignatures(apiSignatures);
+            for (Signature modelSignature : modelSignatures) {
+                modelSignature.setPublisher(modelPublisher);
+            }
+            modelPublisher.setSignatures(modelSignatures);
+        }
+        
+        public static void mapBusinessSignature(List<org.w3._2000._09.xmldsig_.SignatureType> apiSignatures, 
+										 org.apache.juddi.model.BusinessEntity modelBusinessEntity)
+				   throws DispositionReportFaultMessage {
+            List<Signature> modelSignatures = mapApiSignaturesToModelSignatures(apiSignatures);
+            for (Signature modelSignature : modelSignatures) {
+                modelSignature.setBusinessEntity(modelBusinessEntity);
+            }
+            modelBusinessEntity.setSignatures(modelSignatures);
+        }	
+
 	public static void mapBusinessNames(List<org.uddi.api_v3.Name> apiNameList, 
 										List<org.apache.juddi.model.BusinessName> modelNameList,
 										org.apache.juddi.model.BusinessEntity modelBusinessEntity) 
@@ -278,11 +471,9 @@
 		}
 		
 		mapBindingTemplates(apiBusinessService.getBindingTemplates(), modelBusinessService.getBindingTemplates(), modelBusinessService);
-
+                mapBusinessServiceSignature(apiBusinessService.getSignature(), modelBusinessService);
 	}
-
 	
-	
 	public static void mapServiceNames(List<org.uddi.api_v3.Name> apiNameList, 
 									   List<org.apache.juddi.model.ServiceName> modelNameList,
 									   org.apache.juddi.model.BusinessService modelBusinessService) 
@@ -342,6 +533,7 @@
 			mapCategoryBag(apiBindingTemplate.getCategoryBag(), modelBindingTemplate.getCategoryBag());
 		}
 		mapTModelInstanceDetails(apiBindingTemplate.getTModelInstanceDetails(), modelBindingTemplate.getTmodelInstanceInfos(), modelBindingTemplate);
+                mapBindingTemplateSignatures(apiBindingTemplate.getSignature(), modelBindingTemplate);
 	}
 	
 	public static void mapBindingDescriptions(List<org.uddi.api_v3.Description> apiDescList, 
@@ -501,6 +693,7 @@
 			mapCategoryBag(apiTModel.getCategoryBag(), modelTModel.getCategoryBag());
 		}
 		mapTModelOverviewDocs(apiTModel.getOverviewDoc(), modelTModel.getOverviewDocs(), modelTModel);
+                mapTmodelSignatures(apiTModel.getSignature(), modelTModel);
 	}
 
 	public static void mapTModelDescriptions(List<org.uddi.api_v3.Description> apiDescList, 
Index: juddi-core/src/main/java/org/apache/juddi/mapping/MappingModelToApi.java
===================================================================
--- juddi-core/src/main/java/org/apache/juddi/mapping/MappingModelToApi.java	(revision 1355564)
+++ juddi-core/src/main/java/org/apache/juddi/mapping/MappingModelToApi.java	(working copy)
@@ -20,8 +20,10 @@
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import javax.xml.bind.JAXBElement;
 
 import javax.xml.bind.JAXBException;
+import javax.xml.namespace.QName;
 
 import org.apache.commons.configuration.ConfigurationException;
 import org.apache.commons.logging.Log;
@@ -29,8 +31,19 @@
 import org.apache.juddi.config.AppConfig;
 import org.apache.juddi.config.Property;
 import org.apache.juddi.jaxb.JAXBMarshaller;
+import org.apache.juddi.model.CanonicalizationMethod;
+import org.apache.juddi.model.KeyInfo;
 import org.apache.juddi.model.OverviewDoc;
+import org.apache.juddi.model.Reference;
+import org.apache.juddi.model.SignatureTransform;
+import org.apache.juddi.model.SignatureValue;
+import org.apache.juddi.model.SignedInfo;
 import org.apache.juddi.model.UddiEntity;
+import org.apache.juddi.model.X509CRL;
+import org.apache.juddi.model.X509Certificate;
+import org.apache.juddi.model.X509KeyInfo;
+import org.apache.juddi.model.X509SKI;
+import org.apache.juddi.model.X509SubjectName;
 import org.apache.juddi.subscription.TypeConvertor;
 import org.apache.juddi.v3.error.ErrorMessage;
 import org.apache.juddi.v3.error.FatalErrorException;
@@ -38,6 +51,17 @@
 import org.uddi.api_v3.OperationalInfo;
 import org.uddi.sub_v3.SubscriptionFilter;
 import org.uddi.v3_service.DispositionReportFaultMessage;
+import org.w3._2000._09.xmldsig_.CanonicalizationMethodType;
+import org.w3._2000._09.xmldsig_.DigestMethodType;
+import org.w3._2000._09.xmldsig_.KeyInfoType;
+import org.w3._2000._09.xmldsig_.ReferenceType;
+import org.w3._2000._09.xmldsig_.SignatureMethodType;
+import org.w3._2000._09.xmldsig_.SignatureType;
+import org.w3._2000._09.xmldsig_.SignatureValueType;
+import org.w3._2000._09.xmldsig_.SignedInfoType;
+import org.w3._2000._09.xmldsig_.TransformType;
+import org.w3._2000._09.xmldsig_.TransformsType;
+import org.w3._2000._09.xmldsig_.X509DataType;
 
 /**
  * @author <a href="mailto:jfaath@apache.org">Jeff Faath</a>
@@ -60,6 +84,7 @@
 		apiPublisher.setMaxBusinesses(modelPublisher.getMaxBusinesses());
 		apiPublisher.setMaxServicePerBusiness(modelPublisher.getMaxServicesPerBusiness());
 		apiPublisher.setMaxTModels(modelPublisher.getMaxTmodels());
+                mapSignature(modelPublisher.getSignatures(), apiPublisher.getSignature());
 	}
 	
 	public static void mapBusinessEntity(org.apache.juddi.model.BusinessEntity modelBusinessEntity, 
@@ -78,8 +103,120 @@
 		
 		mapBusinessServices(modelBusinessEntity.getBusinessServices(), modelBusinessEntity.getServiceProjections(), apiBusinessEntity.getBusinessServices(), apiBusinessEntity);
 	
+                mapSignature(modelBusinessEntity.getSignatures(), apiBusinessEntity.getSignature());
 	}
 
+        public static void mapSignature(List<org.apache.juddi.model.Signature> signatureList,
+										List<org.w3._2000._09.xmldsig_.SignatureType> apiSignatureList) 
+				   throws DispositionReportFaultMessage {
+            apiSignatureList.clear();
+            for (org.apache.juddi.model.Signature modelSig : signatureList) {
+                SignatureType apiSignature = new SignatureType();
+                apiSignature.setId(modelSig.getXmlID());
+                
+                SignedInfo modelSignedInfo = modelSig.getSignedInfo();
+                SignedInfoType apiSignedInfoType = new SignedInfoType();
+                apiSignature.setSignedInfo(apiSignedInfoType);
+                // Canonicalization method
+                CanonicalizationMethod modelCanonMethod = modelSignedInfo.getCanonicalizationMethod();
+                CanonicalizationMethodType apiCanonMethod = new CanonicalizationMethodType();
+                apiCanonMethod.setAlgorithm(modelCanonMethod.getAlgorithm());
+                apiSignedInfoType.setCanonicalizationMethod(apiCanonMethod);
+                
+                // Signature Method
+                String sigAlg = modelSignedInfo.getSignatureMethod().getAlgorithm();
+                SignatureMethodType apiSigMethod = new SignatureMethodType();
+                apiSigMethod.setAlgorithm(sigAlg);
+                apiSignedInfoType.setSignatureMethod(apiSigMethod);
+                
+                // References
+                List<Reference> modelReferenceList = modelSignedInfo.getReference();
+                List<ReferenceType> apiReferenceList = apiSignedInfoType.getReference();
+                for (Reference modelRef : modelReferenceList) {
+                    ReferenceType apiRef = new ReferenceType();
+                    String refUri = modelRef.getUri();
+                    if (refUri == null) {
+                        refUri = "";
+                    }
+                    apiRef.setURI(refUri);
+                    
+                    List<SignatureTransform> modelSigTransformList = modelRef.getTransforms();
+                    TransformsType apiTransformsType = apiRef.getTransforms();
+                    if (apiTransformsType == null) {
+                        apiTransformsType = new TransformsType();
+                        apiRef.setTransforms(apiTransformsType);
+                    }
+                    List<TransformType> apiTransformList = apiTransformsType.getTransform();
+                    for (SignatureTransform modelSigTransform : modelSigTransformList) {
+                        String modelTransformAlgStr = modelSigTransform.getTransform();
+                        TransformType apiTransform = new TransformType();
+                        apiTransform.setAlgorithm(modelTransformAlgStr);
+                        apiTransformList.add(apiTransform);
+                    }
+                    
+                    String digestMethodStr = modelRef.getDigestMethod();
+                    byte[] digestValBytes = modelRef.getDigestValue();
+                    
+                    DigestMethodType apiDigestMethod = new DigestMethodType();
+                    apiDigestMethod.setAlgorithm(digestMethodStr);
+                    apiRef.setDigestMethod(apiDigestMethod);
+                    apiRef.setDigestValue(digestValBytes);
+                    
+                    apiReferenceList.add(apiRef);
+                }
+                
+                // Signature Value
+                SignatureValueType apiSignatureValue = new SignatureValueType();
+                SignatureValue modelSigValue = modelSig.getSignatureValue();
+                apiSignatureValue.setId(modelSigValue.getXmlID());
+                apiSignatureValue.setValue(modelSigValue.getValue());
+                
+                apiSignature.setSignatureValue(apiSignatureValue);
+                
+                KeyInfoType apiKeyInfo = new KeyInfoType();
+                KeyInfo modelKeyInfo = modelSig.getKeyInfo();
+                apiKeyInfo.setId(modelKeyInfo.getXmlID());
+                
+                List<X509KeyInfo> modelX509KeyInfoList = modelKeyInfo.getX509KeyInfo();
+                List<Object> apiX509KeyInfoList = apiKeyInfo.getContent();
+                for (X509KeyInfo modelX509KeyInfo : modelX509KeyInfoList) {
+                    X509DataType apiX509Data = new X509DataType();
+                    
+                    List<X509CRL> modelX509CRLList = modelX509KeyInfo.getX509CRL();
+                    for (X509CRL modelX509CRL : modelX509CRLList) {
+                        byte[] contents = modelX509CRL.getContent();
+                        JAXBElement dataJAXB = new JAXBElement(new QName("http://www.w3.org/2000/09/xmldsig#", "X509CRL"), byte[].class, contents);
+                        apiX509Data.getX509IssuerSerialOrX509SKIOrX509SubjectName().add(dataJAXB);
+                    }
+                    List<X509Certificate> modelX509CertificateList = modelX509KeyInfo.getX509Certificate();
+                    for (X509Certificate modelX509Certificate : modelX509CertificateList) {
+                        byte[] contents = modelX509Certificate.getContent();
+                        JAXBElement dataJAXB = new JAXBElement(new QName("http://www.w3.org/2000/09/xmldsig#", "X509Certificate"), byte[].class, contents);
+                        apiX509Data.getX509IssuerSerialOrX509SKIOrX509SubjectName().add(dataJAXB);
+                    }
+                    List<X509SKI> modelX509SKIList = modelX509KeyInfo.getX509SKI();
+                    for (X509SKI modelX509SKI : modelX509SKIList) {
+                        byte[] contents = modelX509SKI.getContent();
+                        JAXBElement dataJAXB = new JAXBElement(new QName("http://www.w3.org/2000/09/xmldsig#", "X509SKI"), byte[].class, contents);
+                        apiX509Data.getX509IssuerSerialOrX509SKIOrX509SubjectName().add(dataJAXB);
+                    }
+                    List<X509SubjectName> modelX509SubjectNameList = modelX509KeyInfo.getX509SubjectName();
+                    for (X509SubjectName modelX509SubjectName : modelX509SubjectNameList) {
+                        String contents = modelX509SubjectName.getContent();
+                        JAXBElement dataJAXB = new JAXBElement(new QName("http://www.w3.org/2000/09/xmldsig#", "X509SubjectName"), String.class, contents);
+                        apiX509Data.getX509IssuerSerialOrX509SKIOrX509SubjectName().add(dataJAXB);
+                    }
+                    
+                    JAXBElement apiX509DataJAXB = new JAXBElement(new QName("http://www.w3.org/2000/09/xmldsig#", "X509DataType"), X509DataType.class, apiX509Data);
+                    apiX509KeyInfoList.add(apiX509DataJAXB);
+                }
+                
+                apiSignature.setKeyInfo(apiKeyInfo);
+                
+                apiSignatureList.add(apiSignature);
+            }
+        }
+                
 	public static void mapBusinessNames(List<org.apache.juddi.model.BusinessName> modelNameList, 
 										List<org.uddi.api_v3.Name> apiNameList) 
 				   throws DispositionReportFaultMessage {
@@ -308,6 +445,7 @@
         mapBindingTemplates(modelBusinessService.getBindingTemplates(), apiBusinessService.getBindingTemplates(), apiBusinessService);
 		apiBusinessService.setCategoryBag(mapCategoryBag(modelBusinessService.getCategoryBag(), apiBusinessService.getCategoryBag()));
 
+                mapSignature(modelBusinessService.getSignatures(), apiBusinessService.getSignature());
 	}
 
 	public static void mapServiceNames(List<org.apache.juddi.model.ServiceName> modelNameList, 
@@ -390,7 +528,7 @@
 		mapBindingDescriptions(modelBindingTemplate.getBindingDescrs(), apiBindingTemplate.getDescription());
 
 		apiBindingTemplate.setCategoryBag(mapCategoryBag(modelBindingTemplate.getCategoryBag(), apiBindingTemplate.getCategoryBag()));
-
+                mapSignature(modelBindingTemplate.getSignatures(), apiBindingTemplate.getSignature());
 	}
 
 	public static void mapBindingDescriptions(List<org.apache.juddi.model.BindingDescr> modelDescList, 
@@ -559,6 +697,7 @@
 		apiTModel.setCategoryBag(mapCategoryBag(modelTModel.getCategoryBag(), apiTModel.getCategoryBag()));
 		
 		mapOverviewDocs(modelTModel.getOverviewDocs(), null, apiTModel);
+                mapSignature(modelTModel.getSignatures(), apiTModel.getSignature());
 	}
 
 	public static void mapTModelDescriptions(List<org.apache.juddi.model.TmodelDescr> modelDescList, 
@@ -674,7 +813,6 @@
 		keyedRef.setKeyValue(modelPublisherAssertion.getKeyValue());
 		
 		apiPublisherAssertion.setKeyedReference(keyedRef);
-		
 	}
 	
 	public static void mapAssertionStatusItem(org.apache.juddi.model.PublisherAssertion modelPublisherAssertion, 
Index: juddi-core/src/main/resources/persistence/openjpa-persistence.xml
===================================================================
--- juddi-core/src/main/resources/persistence/openjpa-persistence.xml	(revision 1355564)
+++ juddi-core/src/main/resources/persistence/openjpa-persistence.xml	(working copy)
@@ -18,7 +18,8 @@
     <class>org.apache.juddi.model.BusinessEntity</class>
     <class>org.apache.juddi.model.BusinessIdentifier</class>
     <class>org.apache.juddi.model.BusinessName</class>
-    <class>org.apache.juddi.model.BusinessService</class>
+    <class>org.apache.juddi.model.BusinessService</class>
+    <class>org.apache.juddi.model.CanonicalizationMethod</class>
     <class>org.apache.juddi.model.CategoryBag</class>
     <class>org.apache.juddi.model.Clerk</class>
     <class>org.apache.juddi.model.ClientSubscriptionInfo</class>
@@ -29,8 +30,11 @@
     <class>org.apache.juddi.model.InstanceDetailsDescr</class>
     <class>org.apache.juddi.model.InstanceDetailsDocDescr</class>
     <class>org.apache.juddi.model.KeyedReference</class>
-    <class>org.apache.juddi.model.KeyedReferenceGroup</class>
+    <class>org.apache.juddi.model.KeyedReferenceGroup</class>
+    <class>org.apache.juddi.model.KeyInfo</class>
     <class>org.apache.juddi.model.Node</class>
+    <class>org.apache.juddi.model.ObjectType</class>
+    <class>org.apache.juddi.model.ObjectTypeContent</class>
     <class>org.apache.juddi.model.OverviewDoc</class>
     <class>org.apache.juddi.model.OverviewDocDescr</class>
     <class>org.apache.juddi.model.PersonName</class>
@@ -38,11 +42,17 @@
     <class>org.apache.juddi.model.Publisher</class>
     <class>org.apache.juddi.model.PublisherAssertion</class>
     <class>org.apache.juddi.model.PublisherAssertionId</class>
+    <class>org.apache.juddi.model.Reference</class>
     <class>org.apache.juddi.model.ServiceCategoryBag</class>
     <class>org.apache.juddi.model.ServiceDescr</class>
     <class>org.apache.juddi.model.ServiceName</class>
     <class>org.apache.juddi.model.ServiceProjection</class>
     <class>org.apache.juddi.model.ServiceProjectionId</class>
+    <class>org.apache.juddi.model.Signature</class>
+    <class>org.apache.juddi.model.SignatureMethod</class>
+    <class>org.apache.juddi.model.SignatureTransform</class>
+    <class>org.apache.juddi.model.SignatureValue</class>
+    <class>org.apache.juddi.model.SignedInfo</class>
     <class>org.apache.juddi.model.Subscription</class>
     <class>org.apache.juddi.model.SubscriptionChunkToken</class>
     <class>org.apache.juddi.model.SubscriptionMatch</class>
@@ -55,7 +65,12 @@
     <class>org.apache.juddi.model.TransferToken</class>
     <class>org.apache.juddi.model.TransferTokenKey</class>
     <class>org.apache.juddi.model.UddiEntity</class>
-    <class>org.apache.juddi.model.UddiEntityPublisher</class>
+    <class>org.apache.juddi.model.UddiEntityPublisher</class>
+    <class>org.apache.juddi.model.X509Certificate</class>
+    <class>org.apache.juddi.model.X509CRL</class>
+    <class>org.apache.juddi.model.X509KeyInfo</class>
+    <class>org.apache.juddi.model.X509SKI</class>
+    <class>org.apache.juddi.model.X509SubjectName</class>
     
     <properties>
       <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(SchemaAction='dropDB,add')"/>
Index: uddi-tck-base/src/main/java/org/apache/juddi/v3/tck/TckValidator.java
===================================================================
--- uddi-tck-base/src/main/java/org/apache/juddi/v3/tck/TckValidator.java	(revision 1355564)
+++ uddi-tck-base/src/main/java/org/apache/juddi/v3/tck/TckValidator.java	(working copy)
@@ -19,6 +19,7 @@
  * @author <a href="mailto:kstam@apache.org">Kurt T Stam</a>
  * @author <a href="mailto:tcunning@apache.org">Tom Cunningham</a>
  */
+import java.util.Arrays;
 import static junit.framework.Assert.assertEquals;
 import static junit.framework.Assert.assertTrue;
 
@@ -43,6 +44,17 @@
 import org.uddi.api_v3.PersonName;
 import org.uddi.api_v3.TModelInstanceDetails;
 import org.uddi.api_v3.TModelInstanceInfo;
+import org.w3._2000._09.xmldsig_.CanonicalizationMethodType;
+import org.w3._2000._09.xmldsig_.DigestMethodType;
+import org.w3._2000._09.xmldsig_.KeyInfoType;
+import org.w3._2000._09.xmldsig_.ObjectType;
+import org.w3._2000._09.xmldsig_.ReferenceType;
+import org.w3._2000._09.xmldsig_.SignatureMethodType;
+import org.w3._2000._09.xmldsig_.SignatureType;
+import org.w3._2000._09.xmldsig_.SignatureValueType;
+import org.w3._2000._09.xmldsig_.SignedInfoType;
+import org.w3._2000._09.xmldsig_.TransformType;
+import org.w3._2000._09.xmldsig_.TransformsType;
 
 public class TckValidator {
 
@@ -104,6 +116,144 @@
 		}
 	}
 	
+        public static void checkSignatures(List<SignatureType> sigs1, List<SignatureType> sigs2) {
+            if (sigs1 == null || sigs2 == null) {
+			assertEquals(sigs1, sigs2);
+			return;
+            }
+            assertEquals(sigs1.size(), sigs2.size());
+            Iterator<SignatureType> sigsList1Itr = sigs1.iterator();
+            Iterator<SignatureType> sigsList2Itr = sigs2.iterator();
+            while (sigsList1Itr.hasNext()) {
+                    SignatureType sig1 = sigsList1Itr.next();
+                    SignatureType sig2 = sigsList2Itr.next();
+                    
+                    assertEquals(sig1.getId(), sig2.getId());
+                    checkKeyInfo(sig1.getKeyInfo(), sig2.getKeyInfo());
+                    checkObjectType(sig1.getObject(), sig2.getObject());
+                    checkSignatureValue(sig1.getSignatureValue(), sig2.getSignatureValue());
+                    checkSignedInfo(sig1.getSignedInfo(), sig2.getSignedInfo());
+            }
+        }
+        
+        public static void checkKeyInfo(KeyInfoType kit1, KeyInfoType kit2) {
+            if (kit1 == null || kit2 == null) {
+                    assertEquals(kit1, kit2);
+                    return;
+            }
+            assertEquals(kit1.getId(), kit2.getId());
+        }
+        
+        public static void checkObjectType(List<ObjectType> obj1List, List<ObjectType> obj2List) {
+            if (obj1List == null || obj2List == null) {
+                assertEquals(obj1List, obj2List);
+                return;
+            }
+            assertEquals(obj1List.size(), obj2List.size());
+            Iterator<ObjectType> objList1Itr = obj1List.iterator();
+            Iterator<ObjectType> objList2Itr = obj2List.iterator();
+            while (objList1Itr.hasNext()) {
+                    ObjectType obj1 = objList1Itr.next();
+                    ObjectType obj2 = objList2Itr.next();
+                    assertEquals(obj1.getEncoding(), obj2.getEncoding());
+                    assertEquals(obj1.getId(), obj2.getId());
+                    assertEquals(obj1.getMimeType(), obj2.getMimeType());
+            }
+        }
+        
+        public static void checkSignatureValue(SignatureValueType sv1, SignatureValueType sv2) {
+            if (sv1 == null || sv2 == null) {
+                assertEquals(sv1, sv2);
+                return;
+            }
+            assertEquals(sv1.getId(), sv2.getId());
+            assertTrue(Arrays.equals(sv1.getValue(), sv2.getValue()));
+        }
+        
+        public static void checkSignedInfo(SignedInfoType si1, SignedInfoType si2) {
+            if (si1 == null || si2 == null) {
+                assertEquals(si1, si2);
+                return;
+            }
+            assertEquals(si1.getId(), si2.getId());
+            checkCanonicalizationMethod(si1.getCanonicalizationMethod(), si2.getCanonicalizationMethod());
+            checkReference(si1.getReference(), si2.getReference());
+            checkSignatureMethod(si1.getSignatureMethod(), si2.getSignatureMethod());
+        }
+        
+        public static void checkCanonicalizationMethod(CanonicalizationMethodType cm1, CanonicalizationMethodType cm2) {
+            if (cm1 ==  null || cm2 == null) {
+                assertEquals(cm1, cm2);
+                return;
+            }
+            assertEquals(cm1.getAlgorithm(), cm2.getAlgorithm());
+        }
+        
+        public static void checkReference(List<ReferenceType> r1List, List<ReferenceType> r2List) {
+            if (r1List == null || r2List == null) {
+                assertEquals(r1List, r2List);
+                return;
+            }
+            assertEquals(r1List.size(), r2List.size());
+            
+            Iterator<ReferenceType> rList1Itr = r1List.iterator();
+            Iterator<ReferenceType> rList2Itr = r2List.iterator();
+            while (rList1Itr.hasNext()) {
+                    ReferenceType r1 = rList1Itr.next();
+                    ReferenceType r2 = rList2Itr.next();
+                    checkReference(r1, r2);
+            }
+        }
+        
+        public static void checkReference(ReferenceType r1, ReferenceType r2) {
+            assertTrue(Arrays.equals(r1.getDigestValue(), r2.getDigestValue()));
+            assertEquals(r1.getId(), r2.getId());
+            assertEquals(r1.getType(), r2.getType());
+            assertEquals(r1.getURI(), r2.getURI());
+            
+            checkDigestMethod(r1.getDigestMethod(), r2.getDigestMethod());
+            checkTransforms(r1.getTransforms(), r2.getTransforms());
+        }
+        
+        public static void checkDigestMethod(DigestMethodType dm1, DigestMethodType dm2) {
+            if (dm1 == null || dm2 == null) {
+                assertEquals(dm1, dm2);
+                return;
+            }
+            assertEquals(dm1.getAlgorithm(), dm2.getAlgorithm());
+        }
+        
+        public static void checkTransforms(TransformsType tTypes1, TransformsType tTypes2) {
+            if (tTypes1 == null || tTypes2 == null) {
+                assertEquals(tTypes1, tTypes2);
+                return;
+            }
+            List<TransformType> tt1List = tTypes1.getTransform();
+            List<TransformType> tt2List = tTypes2.getTransform();
+            if (tt1List == null || tt2List == null) {
+                assertEquals(tt1List, tt2List);
+                return;
+            }
+            assertEquals(tt1List.size(), tt2List.size());
+            
+            Iterator<TransformType> ttList1Itr = tt1List.iterator();
+            Iterator<TransformType> ttList2Itr = tt2List.iterator();
+            while (ttList1Itr.hasNext()) {
+                    TransformType tx1 = ttList1Itr.next();
+                    TransformType tx2 = ttList2Itr.next();
+                    
+                    assertEquals(tx1.getAlgorithm(), tx2.getAlgorithm());
+            }
+        }
+        
+        public static void checkSignatureMethod(SignatureMethodType smt1, SignatureMethodType smt2) {
+            if (smt1 == null || smt2 == null) {
+                assertEquals(smt1, smt2);
+                return;
+            }
+            assertEquals(smt1.getAlgorithm(), smt2.getAlgorithm());
+        }
+        
 	public static void checkContacts(Contacts contacts1, Contacts contacts2) {
 		if (contacts1 == null || contacts2 == null) {
 			assertEquals(contacts1, contacts2);
Index: uddi-tck-base/src/main/java/org/apache/juddi/v3/tck/TckBusiness.java
===================================================================
--- uddi-tck-base/src/main/java/org/apache/juddi/v3/tck/TckBusiness.java	(revision 1355564)
+++ uddi-tck-base/src/main/java/org/apache/juddi/v3/tck/TckBusiness.java	(working copy)
@@ -201,7 +201,7 @@
 			TckValidator.checkDiscoveryUrls(beIn.getDiscoveryURLs(), beOut.getDiscoveryURLs());
 			TckValidator.checkContacts(beIn.getContacts(), beOut.getContacts());
 			TckValidator.checkCategories(beIn.getCategoryBag(), beOut.getCategoryBag());
-			
+			TckValidator.checkSignatures(beIn.getSignature(), beOut.getSignature());
 		} catch(Throwable e) {
 			logger.error(e.getMessage(),e);
 			Assert.fail("No exception should be thrown");
Index: uddi-tck-base/src/main/resources/uddi_data/joepublisher/businessEntity.xml
===================================================================
--- uddi-tck-base/src/main/resources/uddi_data/joepublisher/businessEntity.xml	(revision 1355564)
+++ uddi-tck-base/src/main/resources/uddi_data/joepublisher/businessEntity.xml	(working copy)
@@ -15,7 +15,7 @@
  * limitations under the License.
  *
  */ -->
-<businessEntity xmlns="urn:uddi-org:api_v3" xmlns:xml="http://www.w3.org/XML/1998/namespace" businessKey="uddi:uddi.joepublisher.com:businessone">
+<businessEntity xmlns="urn:uddi-org:api_v3" xmlns:xml="http://www.w3.org/XML/1998/namespace" businessKey="uddi:uddi.joepublisher.com:businessone" xmlns:ns2="http://www.w3.org/2000/09/xmldsig#">
   <discoveryURLs>
     <discoveryURL useType="home">http://www.businessone.com</discoveryURL>
     <discoveryURL useType="serviceList">http://www.businessone.com/services</discoveryURL>
@@ -57,4 +57,24 @@
   <identifierBag>
     <keyedReference tModelKey="uddi:tmodelkey:identifier" keyName="identify" keyValue="identity" />
   </identifierBag>
+  <ns2:Signature>
+        <ns2:SignedInfo>
+          <ns2:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
+          <ns2:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#dsa-sha1"/>
+          <ns2:Reference URI="">
+              <ns2:Transforms>
+                  <ns2:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
+              </ns2:Transforms>
+              <ns2:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
+              <ns2:DigestValue>LfYUewvRm4ezL9t4X2d8Kxdzrj8=</ns2:DigestValue>
+          </ns2:Reference>
+      </ns2:SignedInfo>
+      <ns2:SignatureValue>UJYI43pA5O7gGfz3bXp8JOL4/YNE7nyDh3HoTAIYYkSn3xfbIf/MZg==</ns2:SignatureValue>
+      <ns2:KeyInfo>
+          <ns2:X509DataType xmlns="urn:uddi-org:api_v3">
+              <ns2:X509Certificate>MIIC9TCCArOgAwIBAgIET/GwbTALBgcqhkjOOAQDBQAwXjELMAkGA1UEBhMCQ0MxCzAJBgNVBAgTAlNUMQ0wCwYDVQQHEwRDaXR5MQwwCgYDVQQKEwNPcmcxEDAOBgNVBAsTB09yZ1VuaXQxEzARBgNVBAMTCkZpcnN0IExhc3QwHhcNMTIwNzAyMTQzMDA1WhcNMTIwOTMwMTQzMDA1WjBeMQswCQYDVQQGEwJDQzELMAkGA1UECBMCU1QxDTALBgNVBAcTBENpdHkxDDAKBgNVBAoTA09yZzEQMA4GA1UECxMHT3JnVW5pdDETMBEGA1UEAxMKRmlyc3QgTGFzdDCCAbcwggEsBgcqhkjOOAQBMIIBHwKBgQD9f1OBHXUSKVLfSpwu7OTn9hG3UjzvRADDHj+AtlEmaUVdQCJR+1k9jVj6v8X1ujD2y5tVbNeBO4AdNG/yZmC3a5lQpaSfn+gEexAiwk+7qdf+t8Yb+DtX58aophUPBPuD9tPFHsMCNVQTWhaRMvZ1864rYdcq7/IiAxmd0UgBxwIVAJdgUI8VIwvMspK5gqLrhAvwWBz1AoGBAPfhoIXWmz3ey7yrXDa4V7l5lK+7+jrqgvlXTAs9B4JnUVlXjrrUWU/mcQcQgYC0SRZxI+hMKBYTt88JMozIpuE8FnqLVHyNKOCjrh4rs6Z1kW6jfwv6ITVi8ftiegEkO8yk8b6oUZCJqIPf4VrlnwaSi2ZegHtVJWQBTDv+z0kqA4GEAAKBgGt63jF7cdAX8c43zp3IclOIp2nF5GOnqtRMXSjgNzk23gD7YwclqOkXz5rWnpLUsVVWZ1QYg6Bb0cOeh90rNrD6u5TqMQ9piJgoT9FENfdJs3B/YcpMfrBdsTk4Z7ESpS0HUTFnAymf8gQNSw9nQa0kPkAKBpJeV3Lh0X2FeU9DMAsGByqGSM44BAMFAAMvADAsAhQ4pPzahHdxHjey/WxXZgMW+1Y8uwIUI+G1wC6N1+zUcn1rJqp/2IbuXO4=</ns2:X509Certificate>
+              <ns2:X509SubjectName>CN=First Last,OU=OrgUnit,O=Org,L=City,ST=ST,C=CC</ns2:X509SubjectName>
+          </ns2:X509DataType>
+      </ns2:KeyInfo>
+  </ns2:Signature>
 </businessEntity>
\ No newline at end of file
