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/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/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/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,84 @@
+/*
+ * 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_signature_transform")
+public class SignatureTransform implements java.io.Serializable {
+    private static final long serialVersionUID = -3233157941119408702L;
+    
+    private Long id;
+    private Reference reference;
+    private String transform;
+    private List<SignatureTransformDataValue> signatureTransformDataValue = new ArrayList<SignatureTransformDataValue>(0);
+    
+    @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;
+    }
+
+    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "signatureTransform")
+    @OrderBy
+    public List<SignatureTransformDataValue> getSignatureTransformDataValue() {
+        return signatureTransformDataValue;
+    }
+
+    public void setSignatureTransformDataValue(List<SignatureTransformDataValue> signatureDataValue) {
+        this.signatureTransformDataValue = signatureDataValue;
+    }    
+}
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<KeyDataValue> keyDataValue = new ArrayList<KeyDataValue>();
+    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<KeyDataValue> getKeyDataValue() {
+        return keyDataValue;
+    }
+
+    public void setKeyDataValue(List<KeyDataValue> keyDataValue) {
+        this.keyDataValue = keyDataValue;
+    }
+    
+    @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/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/KeyDataValue.java
===================================================================
--- juddi-core/src/main/java/org/apache/juddi/model/KeyDataValue.java	(revision 0)
+++ juddi-core/src/main/java/org/apache/juddi/model/KeyDataValue.java	(revision 0)
@@ -0,0 +1,147 @@
+/*
+ * 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_key_data_value")
+public class KeyDataValue implements java.io.Serializable {
+    private static final long serialVersionUID = -6353389848796421615L;
+    
+    private Long id;
+    private KeyInfo keyInfo;
+    private String keyDataType;
+    private String keyDataName;
+    private byte[] keyDataValueBytes;
+    private String keyDataValueString;
+    private KeyDataValue keyDataValue;
+    private List<KeyDataValue> keyDataValueList = new ArrayList<KeyDataValue>();
+
+    public KeyDataValue() {
+    }
+    
+    public KeyDataValue(KeyInfo keyInfo, String keyDataType, String keyDataName, byte[] keyDataValueBytes, String keyDataValueString, KeyDataValue keyDataValue) {
+        this.keyInfo = keyInfo;
+        this.keyDataType = keyDataType;
+        this.keyDataName = keyDataName;
+        this.keyDataValueBytes = keyDataValueBytes;
+        this.keyDataValueString = keyDataValueString;
+        this.keyDataValue = keyDataValue;
+    }
+    
+    
+    
+    @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 = true)
+    public KeyInfo getKeyInfo() {
+        return keyInfo;
+    }
+
+    public void setKeyInfo(KeyInfo keyInfo) {
+        this.keyInfo = keyInfo;
+    }
+    
+    @ManyToOne(fetch = FetchType.LAZY)
+    @JoinColumn(name = "key_data_value_key", nullable = true)
+    public KeyDataValue getKeyDataValue() {
+        return keyDataValue;
+    }
+
+    public void setKeyDataValue(KeyDataValue keyDataValue) {
+        this.keyDataValue = keyDataValue;
+    }
+    
+    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "keyDataValue")
+    @OrderBy
+    public List<KeyDataValue> getKeyDataValueList() {
+        return keyDataValueList;
+    }
+
+    public void setKeyDataValueList(List<KeyDataValue> keyDataValueList) {
+        this.keyDataValueList = keyDataValueList;
+    }
+
+    @Column(name="key_data_name")
+    public String getKeyDataName() {
+        return keyDataName;
+    }
+
+    public void setKeyDataName(String keyDataName) {
+        this.keyDataName = keyDataName;
+    }
+    
+    @Column(name="key_data_type")
+    public String getKeyDataType() {
+        return keyDataType;
+    }
+
+    public void setKeyDataType(String keyDataType) {
+        this.keyDataType = keyDataType;
+    }
+
+    @Lob
+    @Column(name="key_data_value")
+    public byte[] getKeyDataValueBytes() {
+        return keyDataValueBytes;
+    }
+
+    public void setKeyDataValueBytes(byte[] keyDataValueBytes) {
+        this.keyDataValueBytes = keyDataValueBytes;
+    }
+
+    @Lob
+    @Column(name="key_data_value_string")
+    public String getKeyDataValueString() {
+        return keyDataValueString;
+    }
+
+    public void setKeyDataValueString(String keyDataValueString) {
+        this.keyDataValueString = keyDataValueString;
+    }
+
+    @Override
+    public String toString() {
+        return "KeyDataValue{" + "id=" + id + ", keyDataType=" + keyDataType + ", keyDataName=" + keyDataName + ", keyDataValueBytes=" + keyDataValueBytes + ", keyDataValueString=" + keyDataValueString + ", keyDataValueList=" + keyDataValueList + '}';
+    }
+}

Property changes on: juddi-core/src/main/java/org/apache/juddi/model/KeyDataValue.java
___________________________________________________________________
Added: svn:executable
   + *

Index: juddi-core/src/main/java/org/apache/juddi/model/SignatureTransformDataValue.java
===================================================================
--- juddi-core/src/main/java/org/apache/juddi/model/SignatureTransformDataValue.java	(revision 0)
+++ juddi-core/src/main/java/org/apache/juddi/model/SignatureTransformDataValue.java	(revision 0)
@@ -0,0 +1,80 @@
+/*
+ * 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_signature_transform_data_value")
+public class SignatureTransformDataValue implements java.io.Serializable {
+    private static final long serialVersionUID = -2233157941119408702L;
+    
+    private Long id;
+    private String contentType;
+    private byte[] contentBytes;
+    private SignatureTransform signatureTransform;
+    
+    @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_transform_key", nullable = false)
+    public SignatureTransform getSignatureTransform() {
+        return signatureTransform;
+    }
+
+    public void setSignatureTransform(SignatureTransform signatureTransform) {
+        this.signatureTransform = signatureTransform;
+    }
+
+    @Column(name="content_type")
+    public String getContentType() {
+        return contentType;
+    }
+
+    public void setContentType(String contentType) {
+        this.contentType = contentType;
+    }
+
+    @Lob
+    @Column(name="content_bytes")
+    public byte[] getContentBytes() {
+        return contentBytes;
+    }
+
+    public void setContentBytes(byte[] contentBytes) {
+        this.contentBytes = contentBytes;
+    }
+}
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/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/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/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/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,54 @@
 
 package org.apache.juddi.mapping;
 
+import java.io.StringWriter;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.GregorianCalendar;
 import java.util.List;
+import javax.xml.bind.JAXB;
+import javax.xml.bind.JAXBElement;
+import javax.xml.transform.dom.DOMResult;
 
-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.v3.error.ErrorMessage;
-import org.apache.juddi.v3.error.FatalErrorException;
+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.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.KeyDataValue;
+import org.apache.juddi.model.SignatureTransformDataValue;
 import org.uddi.api_v3.Description;
 import org.uddi.sub_v3.ObjectFactory;
 import org.uddi.v3_service.DispositionReportFaultMessage;
+import org.w3._2000._09.xmldsig_.DSAKeyValueType;
+import org.w3._2000._09.xmldsig_.KeyValueType;
+import org.w3._2000._09.xmldsig_.PGPDataType;
+import org.w3._2000._09.xmldsig_.RSAKeyValueType;
+import org.w3._2000._09.xmldsig_.ReferenceType;
+import org.w3._2000._09.xmldsig_.RetrievalMethodType;
+import org.w3._2000._09.xmldsig_.SPKIDataType;
+import org.w3._2000._09.xmldsig_.TransformType;
+import org.w3._2000._09.xmldsig_.TransformsType;
+import org.w3._2000._09.xmldsig_.X509DataType;
+import org.w3c.dom.DOMException;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.ls.DOMImplementationLS;
+import org.w3c.dom.ls.LSException;
+import org.w3c.dom.ls.LSSerializer;
 
 
 /**
@@ -55,6 +89,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,8 +112,145 @@
 							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 = mapReference(modelSignedInfo, apiReference);
+                    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<KeyDataValue> keyInfoDataValues = modelKeyInfo.getKeyDataValue();
+                for (Object apiKeyInfoContentObj : apiKeyInfoContentList) {
+                    if (apiKeyInfoContentObj instanceof JAXBElement) {
+                        JAXBElement apiKeyInfoContentJAXB = (JAXBElement)apiKeyInfoContentObj;
+                        String apiKeyInfoContentTagName = apiKeyInfoContentJAXB.getName().getLocalPart();
+                        if (apiKeyInfoContentJAXB.getValue() instanceof X509DataType) {
+                            KeyDataValue modelX509KeyData = mapX509DataType(apiKeyInfoContentJAXB, modelKeyInfo);
+                            keyInfoDataValues.add(modelX509KeyData);
+                        } else if (apiKeyInfoContentTagName.equals("KeyName")) {
+                            KeyDataValue modelKeyNameKDV = mapKeyName(apiKeyInfoContentJAXB);
+                            modelKeyNameKDV.setKeyInfo(modelKeyInfo);
+                            keyInfoDataValues.add(modelKeyNameKDV);
+                        } else if (apiKeyInfoContentTagName.equals("KeyValue")) {
+                            KeyDataValue modelKeyValueKDV = mapKeyValue(apiKeyInfoContentJAXB, keyInfoDataValues);
+                            modelKeyValueKDV.setKeyInfo(modelKeyInfo);
+                            keyInfoDataValues.add(modelKeyValueKDV);
+                        } else if (apiKeyInfoContentTagName.equals("MgmtData")) {
+                            KeyDataValue modelKeyValueKDV = new KeyDataValue();
+                            modelKeyValueKDV.setKeyDataName(apiKeyInfoContentTagName);
+                            modelKeyValueKDV.setKeyDataType("String");
+                            modelKeyValueKDV.setKeyDataValueString((String)apiKeyInfoContentJAXB.getValue());
+                            modelKeyValueKDV.setKeyInfo(modelKeyInfo);
+                            keyInfoDataValues.add(modelKeyValueKDV);
+                        } else if (apiKeyInfoContentTagName.equals("RetrievalMethod")) {
+                            RetrievalMethodType retrievalMethodType = (RetrievalMethodType)apiKeyInfoContentJAXB.getValue();
+                            KeyDataValue retrievalMethodTypeKDV = mapRetrievalMethod(apiKeyInfoContentTagName, modelKeyInfo, retrievalMethodType);
+                            keyInfoDataValues.add(retrievalMethodTypeKDV);
+                        } else if (apiKeyInfoContentTagName.equals("PGPData")) {
+                            PGPDataType pgpDataType = (PGPDataType)apiKeyInfoContentJAXB.getValue();
+                            KeyDataValue pgpDataTypeKDV = mapPGPDataType(apiKeyInfoContentTagName, modelKeyInfo, pgpDataType);
+                            keyInfoDataValues.add(pgpDataTypeKDV);
+                        } else if (apiKeyInfoContentTagName.equals("SPKIData")) {
+                            SPKIDataType spkiDataType = (SPKIDataType)apiKeyInfoContentJAXB.getValue();
+                            KeyDataValue spkiDataTypeKDV = mapSPKIDataType(apiKeyInfoContentTagName, modelKeyInfo, spkiDataType);
+                            keyInfoDataValues.add(spkiDataTypeKDV);
+                        } else {
+                            throw new RuntimeException("Unrecognized tag: " + apiKeyInfoContentTagName + " type: " + apiKeyInfoContentJAXB.getValue().getClass().getCanonicalName());
+                        }
+                    }
+                }
+                
+                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,
@@ -278,11 +450,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 +512,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 +672,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, 
@@ -641,6 +813,275 @@
 			modelNode.setFactoryURLPkgs(apiNode.getFactoryURLPkgs());
 		}
 	}
-	
+
+        private static Reference mapReference(SignedInfo modelSignedInfo, ReferenceType apiReference) {
+            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());
+
+                for (Object xform : apiTransform.getContent()) {
+                    SignatureTransformDataValue sdv = mapSignatureTransformDataValue(xform);
+                    sdv.setSignatureTransform(modelTransform);
+                    modelTransform.getSignatureTransformDataValue().add(sdv);
+                }
+
+                ref.getTransforms().add(modelTransform);
+            }
+            String digestMethodStr = apiReference.getDigestMethod().getAlgorithm();
+            byte[] digestValueBytes = apiReference.getDigestValue();
+            ref.setDigestMethod(digestMethodStr);
+            ref.setDigestValue(digestValueBytes);
+            return ref;
+        }
+
+    private static KeyDataValue mapX509DataType(JAXBElement apiKeyInfoContentJAXB, KeyInfo modelKeyInfo) throws RuntimeException {
+        X509DataType apiKeyInfoContent = (X509DataType)apiKeyInfoContentJAXB.getValue();
+        KeyDataValue modelX509KeyData = new KeyDataValue();
+        modelX509KeyData.setKeyDataType(X509DataType.class.getSimpleName());
+        modelX509KeyData.setKeyDataName(apiKeyInfoContentJAXB.getName().getLocalPart());
+        modelX509KeyData.setKeyInfo(modelKeyInfo);
+        List<Object> x509IssuerSerialOrX509SKIOrX509SubjectNameList = apiKeyInfoContent.getX509IssuerSerialOrX509SKIOrX509SubjectName();
+        for (Object x509IssuerSerialOrX509SKIOrX509SubjectNameObj : x509IssuerSerialOrX509SKIOrX509SubjectNameList) {
+            JAXBElement x509IssuerSerialOrX509SKIOrX509SubjectNameJAXB = (JAXBElement)x509IssuerSerialOrX509SKIOrX509SubjectNameObj;
+            String tagName = x509IssuerSerialOrX509SKIOrX509SubjectNameJAXB.getName().getLocalPart();
+            Object x509IssuerSerialOrX509SKIOrX509SubjectName = x509IssuerSerialOrX509SKIOrX509SubjectNameJAXB.getValue();
+            
+            KeyDataValue modelKeyInfoValue = new KeyDataValue();
+            modelKeyInfoValue.setKeyDataName(tagName);
+            if (x509IssuerSerialOrX509SKIOrX509SubjectName instanceof byte[]) {
+                modelKeyInfoValue.setKeyDataValueBytes((byte[])x509IssuerSerialOrX509SKIOrX509SubjectName);
+            } else if (x509IssuerSerialOrX509SKIOrX509SubjectName instanceof String) {
+                modelKeyInfoValue.setKeyDataValueString((String)x509IssuerSerialOrX509SKIOrX509SubjectName);
+            } else if (x509IssuerSerialOrX509SKIOrX509SubjectName != null) {
+                throw new RuntimeException("Unrecognized Value for Element: " + tagName + ": " + x509IssuerSerialOrX509SKIOrX509SubjectName.getClass().getCanonicalName());
+            }
+            modelKeyInfoValue.setKeyDataValue(modelX509KeyData);
+            modelX509KeyData.getKeyDataValueList().add(modelKeyInfoValue);
+        }
+        return modelX509KeyData;
+    }
+
+    private static KeyDataValue mapKeyName(JAXBElement apiKeyInfoContentJAXB) {
+        KeyDataValue modelKeyNameKDV = new KeyDataValue();
+        modelKeyNameKDV.setKeyDataType(String.class.getSimpleName());
+        modelKeyNameKDV.setKeyDataName(apiKeyInfoContentJAXB.getName().getLocalPart());
+        modelKeyNameKDV.setKeyDataValueString((String)apiKeyInfoContentJAXB.getValue());
+        return modelKeyNameKDV;
+    }
+
+    private static KeyDataValue mapKeyValue(JAXBElement apiKeyInfoContentJAXB, List<KeyDataValue> keyInfoDataValues) {
+        KeyValueType kvt = (KeyValueType)apiKeyInfoContentJAXB.getValue();
+        KeyDataValue modelKeyValueKDV = new KeyDataValue();
+        modelKeyValueKDV.setKeyDataType(KeyValueType.class.getSimpleName());
+        modelKeyValueKDV.setKeyDataName(apiKeyInfoContentJAXB.getName().getLocalPart());
+        keyInfoDataValues.add(modelKeyValueKDV);
+        List<Object> kvObjList = kvt.getContent();
+        for (Object kvObj : kvObjList) {
+            if (kvObj instanceof JAXBElement) {
+                JAXBElement kvJAXB = (JAXBElement)kvObj;
+                Object childVal = kvJAXB.getValue();
+
+                KeyDataValue childKDV = new KeyDataValue();
+                childKDV.setKeyDataValue(modelKeyValueKDV);
+                childKDV.setKeyDataName(kvJAXB.getName().getLocalPart());
+                childKDV.setKeyDataType(childVal.getClass().getSimpleName());
+                modelKeyValueKDV.getKeyDataValueList().add(childKDV);
+
+                if (childVal instanceof DSAKeyValueType) {
+                    DSAKeyValueType dsaKeyVal = (DSAKeyValueType)childVal;
+                    String dsaKeyValueTagName = kvJAXB.getName().getLocalPart();
+                    KeyDataValue dsaKeyValKDV = new KeyDataValue(null, DSAKeyValueType.class.getSimpleName(), dsaKeyValueTagName, null, null, childKDV);
+                    childKDV.getKeyDataValueList().add(dsaKeyValKDV);
+
+                    KeyDataValue gValKDV = new KeyDataValue(null, byte[].class.getSimpleName(), "G", dsaKeyVal.getG(), null, dsaKeyValKDV);
+                    dsaKeyValKDV.getKeyDataValueList().add(gValKDV);
+
+                    KeyDataValue jValKDV = new KeyDataValue(null, byte[].class.getSimpleName(), "J", dsaKeyVal.getJ(), null, dsaKeyValKDV);
+                    dsaKeyValKDV.getKeyDataValueList().add(jValKDV);
+
+                    KeyDataValue pValKDV = new KeyDataValue(null, byte[].class.getSimpleName(), "P", dsaKeyVal.getP(), null, dsaKeyValKDV);
+                    dsaKeyValKDV.getKeyDataValueList().add(pValKDV);
+
+                    KeyDataValue pGenCounterValKDV = new KeyDataValue(null, byte[].class.getSimpleName(), "PgenCounter", dsaKeyVal.getPgenCounter(), null, dsaKeyValKDV);
+                    dsaKeyValKDV.getKeyDataValueList().add(pGenCounterValKDV);
+
+                    KeyDataValue qValKDV = new KeyDataValue(null, byte[].class.getSimpleName(), "Q", dsaKeyVal.getQ(), null, dsaKeyValKDV);
+                    dsaKeyValKDV.getKeyDataValueList().add(qValKDV);
+
+                    KeyDataValue seedValKDV = new KeyDataValue(null, byte[].class.getSimpleName(), "Seed", dsaKeyVal.getSeed(), null, dsaKeyValKDV);
+                    dsaKeyValKDV.getKeyDataValueList().add(seedValKDV);
+
+                    KeyDataValue yValKDV = new KeyDataValue(null, byte[].class.getSimpleName(), "Y", dsaKeyVal.getY(), null, dsaKeyValKDV);
+                    dsaKeyValKDV.getKeyDataValueList().add(yValKDV);
+                } else if (childVal instanceof RSAKeyValueType) {
+                    RSAKeyValueType rsaKeyVal = (RSAKeyValueType)childVal;
+                    String rsaKeyValueTagName = kvJAXB.getName().getLocalPart();
+                    KeyDataValue rsaKeyValKDV = new KeyDataValue(null, RSAKeyValueType.class.getSimpleName(), rsaKeyValueTagName, null, null, childKDV);
+                    childKDV.getKeyDataValueList().add(rsaKeyValKDV);
+
+                    KeyDataValue exponentValKDV = new KeyDataValue(null, byte[].class.getSimpleName(), "Exponent", rsaKeyVal.getExponent(), null, rsaKeyValKDV);
+                    rsaKeyValKDV.getKeyDataValueList().add(exponentValKDV);
+                    
+                    KeyDataValue modulusValKDV = new KeyDataValue(null, byte[].class.getSimpleName(), "Modulus", rsaKeyVal.getModulus(), null, rsaKeyValKDV);
+                    rsaKeyValKDV.getKeyDataValueList().add(modulusValKDV);
+                }
+            }
+        }
+        return modelKeyValueKDV;
+    }
+
+    private static KeyDataValue mapRetrievalMethod(String apiKeyInfoContentTagName, KeyInfo modelKeyInfo, RetrievalMethodType retrievalMethodType) {
+        KeyDataValue retrievalMethodTypeKDV = new KeyDataValue();
+        retrievalMethodTypeKDV.setKeyDataName(apiKeyInfoContentTagName);
+        retrievalMethodTypeKDV.setKeyDataType(RetrievalMethodType.class.getSimpleName());
+        retrievalMethodTypeKDV.setKeyInfo(modelKeyInfo);
+        KeyDataValue uriKDV = new KeyDataValue();
+        uriKDV.setKeyDataName("URI");
+        uriKDV.setKeyDataType(String.class.getSimpleName());
+        uriKDV.setKeyDataValue(retrievalMethodTypeKDV);
+        uriKDV.setKeyDataValueString(retrievalMethodType.getURI());
+        retrievalMethodTypeKDV.getKeyDataValueList().add(uriKDV);
+        KeyDataValue typeKDV = new KeyDataValue();
+        typeKDV.setKeyDataName("Type");
+        typeKDV.setKeyDataType(String.class.getSimpleName());
+        typeKDV.setKeyDataValue(retrievalMethodTypeKDV);
+        typeKDV.setKeyDataValueString(retrievalMethodType.getType());
+        retrievalMethodTypeKDV.getKeyDataValueList().add(typeKDV);
+        TransformsType transformsType = retrievalMethodType.getTransforms();
+        if (transformsType != null) {
+            List<TransformType> tTypeList = transformsType.getTransform();
+            for (TransformType tType : tTypeList) {
+                KeyDataValue transformKDV = new KeyDataValue();
+                transformKDV.setKeyDataName("Transform");
+                transformKDV.setKeyDataType(String.class.getSimpleName());
+                transformKDV.setKeyDataValue(retrievalMethodTypeKDV);
+                transformKDV.setKeyDataValueString(tType.getAlgorithm());
+                
+                for (Object xform : tType.getContent()) {
+                    SignatureTransformDataValue stdv = mapSignatureTransformDataValue(xform);
+                    KeyDataValue transformContentKDV = new KeyDataValue();
+                    transformContentKDV.setKeyDataType(stdv.getContentType());
+                    transformContentKDV.setKeyDataValueBytes(stdv.getContentBytes());
+                    transformContentKDV.setKeyDataValue(transformKDV);
+                    transformKDV.getKeyDataValueList().add(transformContentKDV);
+                }
+                
+                retrievalMethodTypeKDV.getKeyDataValueList().add(transformKDV);
+            }
+        }
+        return retrievalMethodTypeKDV;
+    }
+
+    private static KeyDataValue mapPGPDataType(String apiKeyInfoContentTagName, KeyInfo modelKeyInfo, PGPDataType pgpDataType) {
+        KeyDataValue pgpDataTypeKDV = new KeyDataValue();
+        pgpDataTypeKDV.setKeyDataName(apiKeyInfoContentTagName);
+        pgpDataTypeKDV.setKeyDataType(PGPDataType.class.getSimpleName());
+        pgpDataTypeKDV.setKeyInfo(modelKeyInfo);
+        
+        List<Object> pgpDataValues = pgpDataType.getContent();
+        for (Object pgpDataValue : pgpDataValues) {
+            if (pgpDataValue instanceof JAXBElement) {
+                JAXBElement pgpDataJAXB = (JAXBElement)pgpDataValue;
+                String tagName = pgpDataJAXB.getName().getLocalPart();
+                
+                KeyDataValue keyIDKDV = new KeyDataValue();
+                keyIDKDV.setKeyDataName(tagName);
+                keyIDKDV.setKeyDataValue(pgpDataTypeKDV);
+                if (pgpDataJAXB.getValue() instanceof String) {
+                    keyIDKDV.setKeyDataValueString((String)pgpDataJAXB.getValue());
+                } else {
+                    keyIDKDV.setKeyDataValueBytes((byte[])pgpDataJAXB.getValue());
+                }
+                pgpDataTypeKDV.getKeyDataValueList().add(keyIDKDV);
+            }
+        }
+        return pgpDataTypeKDV;
+    }
+    
+    private static KeyDataValue mapSPKIDataType(String apiKeyInfoContentTagName, KeyInfo modelKeyInfo, SPKIDataType spkiDataType) {
+        KeyDataValue spkiDataTypeKDV = new KeyDataValue();
+        spkiDataTypeKDV.setKeyDataName(apiKeyInfoContentTagName);
+        spkiDataTypeKDV.setKeyDataType(SPKIDataType.class.getSimpleName());
+        spkiDataTypeKDV.setKeyInfo(modelKeyInfo);
+        
+        List<Object> spkiDataValues = spkiDataType.getSPKISexpAndAny();
+        for (Object spkiDataValue : spkiDataValues) {
+            if (spkiDataValue instanceof JAXBElement) {
+                JAXBElement spkiDataJAXB = (JAXBElement)spkiDataValue;
+                String tagName = spkiDataJAXB.getName().getLocalPart();
+                
+                KeyDataValue keyIDKDV = new KeyDataValue();
+                keyIDKDV.setKeyDataName(tagName);
+                keyIDKDV.setKeyDataValue(spkiDataTypeKDV);
+                if (spkiDataJAXB.getValue() instanceof String) {
+                    keyIDKDV.setKeyDataValueString((String)spkiDataJAXB.getValue());
+                } else {
+                    keyIDKDV.setKeyDataValueBytes((byte[])spkiDataJAXB.getValue());
+                }
+                spkiDataTypeKDV.getKeyDataValueList().add(keyIDKDV);
+            } else {
+                throw new RuntimeException("Unrecognized type: " + spkiDataValue.getClass().getCanonicalName());
+            }
+        }
+        return spkiDataTypeKDV;
+    }
+
+    private static SignatureTransformDataValue mapSignatureTransformDataValue(Object xform) {
+        SignatureTransformDataValue sdv = new SignatureTransformDataValue();
+        if (xform instanceof String) {
+            sdv.setContentType(String.class.getSimpleName());
+            String xformStr = xform.toString();
+            byte[] xformBytes = xformStr.getBytes();
+            sdv.setContentBytes(xformBytes);
+        } else if (xform instanceof Element) {
+            sdv.setContentType(Element.class.getCanonicalName());
+            Element xformEl = (Element)xform;
+            String str = serializeTransformElement(xformEl);
+            try {
+                sdv.setContentBytes(str.getBytes("UTF-8"));
+            } catch (Exception e) {
+                throw new RuntimeException("Failed to encode string due to: " + e.getMessage(), e);
+            }
+        } else if (xform instanceof byte[]) {
+            sdv.setContentType(byte[].class.getSimpleName());
+            sdv.setContentBytes((byte[])xform);
+        } else if (xform instanceof JAXBElement) {
+            sdv.setContentType(Element.class.getCanonicalName());
+            JAXBElement xformJAXB = (JAXBElement)xform;
+            DOMResult domResult = new DOMResult();
+            JAXB.marshal(xformJAXB, domResult);
+            Element xformEl = ((Document)domResult.getNode()).getDocumentElement();
+            String str = serializeTransformElement(xformEl);
+            try {
+                sdv.setContentBytes(str.getBytes("UTF-8"));
+            } catch (Exception e) {
+                throw new RuntimeException("Failed to encode string due to: " + e.getMessage(), e);
+            }
+        } else {
+            throw new RuntimeException("Unrecognized type: " + xform.getClass().getCanonicalName());
+        }
+        return sdv;
+    }
+
+    private static String serializeTransformElement(Element xformEl) throws DOMException, LSException {
+        Document document = xformEl.getOwnerDocument();
+        DOMImplementationLS domImplLS = (DOMImplementationLS)document.getImplementation();
+        LSSerializer serializer = domImplLS.createLSSerializer();
+//        serializer.getDomConfig().setParameter("namespaces", true);
+//        serializer.getDomConfig().setParameter("namespace-declarations", true);
+        serializer.getDomConfig().setParameter("canonical-form", false);
+        serializer.getDomConfig().setParameter("xml-declaration", false);
+        String str = serializer.writeToString(xformEl);
+        return str;
+    }
 }
 	
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)
@@ -17,11 +17,16 @@
 
 package org.apache.juddi.mapping;
 
+import java.io.ByteArrayInputStream;
 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 javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
 
 import org.apache.commons.configuration.ConfigurationException;
 import org.apache.commons.logging.Log;
@@ -29,8 +34,16 @@
 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.KeyDataValue;
+import org.apache.juddi.model.SignatureTransformDataValue;
 import org.apache.juddi.subscription.TypeConvertor;
 import org.apache.juddi.v3.error.ErrorMessage;
 import org.apache.juddi.v3.error.FatalErrorException;
@@ -38,6 +51,25 @@
 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_.DSAKeyValueType;
+import org.w3._2000._09.xmldsig_.DigestMethodType;
+import org.w3._2000._09.xmldsig_.KeyInfoType;
+import org.w3._2000._09.xmldsig_.KeyValueType;
+import org.w3._2000._09.xmldsig_.PGPDataType;
+import org.w3._2000._09.xmldsig_.RSAKeyValueType;
+import org.w3._2000._09.xmldsig_.ReferenceType;
+import org.w3._2000._09.xmldsig_.RetrievalMethodType;
+import org.w3._2000._09.xmldsig_.SPKIDataType;
+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;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
 
 /**
  * @author <a href="mailto:jfaath@apache.org">Jeff Faath</a>
@@ -60,6 +92,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 +111,226 @@
 		
 		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);
+                        
+                        List<SignatureTransformDataValue> sigTransformSDVList = modelSigTransform.getSignatureTransformDataValue();
+                        for (SignatureTransformDataValue sigTransformSDV : sigTransformSDVList) {
+                            String type = sigTransformSDV.getContentType();
+                            byte[] xformBytes = sigTransformSDV.getContentBytes();
+                            Object transformObject = convertDataToTransformContent(type, xformBytes);
+                            apiTransform.getContent().add(transformObject);
+                        }
+                        
+                        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<KeyDataValue> modelKeyDataValueList = modelKeyInfo.getKeyDataValue();
+                List<Object> apiX509KeyInfoList = apiKeyInfo.getContent();
+                mapModelKeyDataValue(modelKeyDataValueList, apiX509KeyInfoList);
+                apiSignature.setKeyInfo(apiKeyInfo);
+                apiSignatureList.add(apiSignature);
+            }
+        }
+        
+        private static void mapModelKeyDataValue(List<KeyDataValue> modelKeyDataValueList, List<Object> parentKeyDataList) {
+            for (KeyDataValue modelKeyDataValue : modelKeyDataValueList) {
+                String tagName = modelKeyDataValue.getKeyDataName();
+                String dataType = modelKeyDataValue.getKeyDataType();
+                byte[] contentBytes = modelKeyDataValue.getKeyDataValueBytes();
+                String contentStr = modelKeyDataValue.getKeyDataValueString();
+                Object contents = contentBytes != null ? contentBytes : contentStr;
+                
+                if (contents == null) {
+                    List<Object> childKeyDataList = new ArrayList<Object>();
+                    if (dataType.equals(X509DataType.class.getSimpleName())) {
+                        X509DataType x509DataType = new X509DataType();
+                        mapModelKeyDataValue(modelKeyDataValue.getKeyDataValueList(), childKeyDataList);
+                        x509DataType.getX509IssuerSerialOrX509SKIOrX509SubjectName().addAll(childKeyDataList);
+                        JAXBElement dataJAXB = new JAXBElement(new QName("http://www.w3.org/2000/09/xmldsig#", tagName), X509DataType.class, x509DataType);
+                        parentKeyDataList.add(dataJAXB);   
+                    } else if (dataType.equals(RetrievalMethodType.class.getSimpleName())) {
+                        RetrievalMethodType retrievalMethodType = new RetrievalMethodType();
+                        TransformsType transformsType = new TransformsType();
+                        for (KeyDataValue retrievalMethodKDV : modelKeyDataValue.getKeyDataValueList()) {
+                            if (retrievalMethodKDV.getKeyDataName().equals("Transform")) {
+                                TransformType tType = new TransformType();
+                                tType.setAlgorithm(retrievalMethodKDV.getKeyDataValueString());
+                                
+                                for (KeyDataValue transformContentKDV: retrievalMethodKDV.getKeyDataValueList()) {
+                                    String type = transformContentKDV.getKeyDataType();
+                                    byte[] xformBytes = transformContentKDV.getKeyDataValueBytes();
+                                    Object transformObject = convertDataToTransformContent(type, xformBytes);
+                                    tType.getContent().add(transformObject);
+                                }
+                                
+                                transformsType.getTransform().add(tType);
+                            } else if (retrievalMethodKDV.getKeyDataName().equals("Type")) {
+                                retrievalMethodType.setType(retrievalMethodKDV.getKeyDataValueString());
+                            } else if (retrievalMethodKDV.getKeyDataName().equals("URI")) {
+                                retrievalMethodType.setURI(retrievalMethodKDV.getKeyDataValueString());
+                            } else {
+                                throw new RuntimeException("Unrecognized key data type: " + retrievalMethodKDV.getKeyDataType());
+                            }
+                        }
+                        if (transformsType.getTransform() != null && !transformsType.getTransform().isEmpty()) {
+                            retrievalMethodType.setTransforms(transformsType);
+                        }
+                        JAXBElement dataJAXB = new JAXBElement(new QName("http://www.w3.org/2000/09/xmldsig#", tagName), RetrievalMethodType.class, retrievalMethodType);
+                        parentKeyDataList.add(dataJAXB);   
+                    } else if (dataType.equals(PGPDataType.class.getSimpleName())) {
+                        PGPDataType pgpDataType = new PGPDataType();
+                        
+                        for (KeyDataValue pgpDataKDV : modelKeyDataValue.getKeyDataValueList()) {
+                            String pgpDataTagName = pgpDataKDV.getKeyDataName();
+                            Object pgpDataContents = pgpDataKDV.getKeyDataValueBytes() != null ? pgpDataKDV.getKeyDataValueBytes() : pgpDataKDV.getKeyDataValueString();
+                            Class pgpDataClazz = pgpDataContents.getClass();
+                            JAXBElement jaxb = new JAXBElement(new QName("http://www.w3.org/2000/09/xmldsig#", pgpDataTagName), pgpDataClazz, pgpDataContents);
+                            pgpDataType.getContent().add(jaxb);
+                        }
+                        
+                        JAXBElement dataJAXB = new JAXBElement(new QName("http://www.w3.org/2000/09/xmldsig#", tagName), PGPDataType.class, pgpDataType);
+                        parentKeyDataList.add(dataJAXB);   
+                    } else if (dataType.equals(SPKIDataType.class.getSimpleName())) {
+                        SPKIDataType spkiDataType = new SPKIDataType();
+                        
+                        for (KeyDataValue spkiDataKDV : modelKeyDataValue.getKeyDataValueList()) {
+                            String spkiDataTagName = spkiDataKDV.getKeyDataName();
+                            Object spkiDataContents = spkiDataKDV.getKeyDataValueBytes() != null ? spkiDataKDV.getKeyDataValueBytes() : spkiDataKDV.getKeyDataValueString();
+                            Class spkiDataClazz = spkiDataContents.getClass();
+                            JAXBElement jaxb = new JAXBElement(new QName("http://www.w3.org/2000/09/xmldsig#", spkiDataTagName), spkiDataClazz, spkiDataContents);
+                            spkiDataType.getSPKISexpAndAny().add(jaxb);
+                        }
+                        
+                        JAXBElement dataJAXB = new JAXBElement(new QName("http://www.w3.org/2000/09/xmldsig#", tagName), SPKIDataType.class, spkiDataType);
+                        parentKeyDataList.add(dataJAXB);
+                    } else if (dataType.equals(KeyValueType.class.getSimpleName())) {
+                        KeyValueType keyValueType = new KeyValueType();
+                        for (KeyDataValue keyValueDataKDV : modelKeyDataValue.getKeyDataValueList()) {
+                            for (KeyDataValue keyValueDataChildKDV : keyValueDataKDV.getKeyDataValueList()) {
+                                String keyDataDataType = keyValueDataChildKDV.getKeyDataType();
+                                if (keyDataDataType.equals("DSAKeyValueType")) {
+                                    DSAKeyValueType dsaKeyValueType = new DSAKeyValueType();
+                                    for (KeyDataValue dsaKDV : keyValueDataChildKDV.getKeyDataValueList()) {
+                                        if ("G".equals(dsaKDV.getKeyDataName())) {
+                                            dsaKeyValueType.setG(dsaKDV.getKeyDataValueBytes());
+                                        } else if ("P".equals(dsaKDV.getKeyDataName())) {
+                                            dsaKeyValueType.setP(dsaKDV.getKeyDataValueBytes());
+                                        } else if ("Q".equals(dsaKDV.getKeyDataName())) {
+                                            dsaKeyValueType.setQ(dsaKDV.getKeyDataValueBytes());
+                                        } else if ("Y".equals(dsaKDV.getKeyDataName())) {
+                                            dsaKeyValueType.setY(dsaKDV.getKeyDataValueBytes());
+                                        } else if ("J".equals(dsaKDV.getKeyDataName())) {
+                                            dsaKeyValueType.setJ(dsaKDV.getKeyDataValueBytes());
+                                        } else if ("Seed".equals(dsaKDV.getKeyDataName())) {
+                                            dsaKeyValueType.setSeed(dsaKDV.getKeyDataValueBytes());
+                                        } else if ("PgenCounter".equals(dsaKDV.getKeyDataName())) {
+                                            dsaKeyValueType.setPgenCounter(dsaKDV.getKeyDataValueBytes());
+                                        } else {
+                                            throw new RuntimeException("Unrecognized dsa type: " + dsaKDV.getKeyDataName());
+                                        } 
+                                    }
+                                    JAXBElement jaxb = new JAXBElement(new QName("http://www.w3.org/2000/09/xmldsig#", keyValueDataChildKDV.getKeyDataName()), DSAKeyValueType.class, dsaKeyValueType);
+                                    keyValueType.getContent().add(jaxb);
+                                } else if (keyDataDataType.equals("RSAKeyValueType")) {
+                                    RSAKeyValueType rsaKeyValueType = new RSAKeyValueType();
+                                    for (KeyDataValue rsaKDV : keyValueDataChildKDV.getKeyDataValueList()) {
+                                        if ("Exponent".equals(rsaKDV.getKeyDataName())) {
+                                            rsaKeyValueType.setExponent(rsaKDV.getKeyDataValueBytes());
+                                        } else if ("Modulus".equals(rsaKDV.getKeyDataName())) {
+                                            rsaKeyValueType.setModulus(rsaKDV.getKeyDataValueBytes());
+                                        } else {
+                                            throw new RuntimeException("Unrecognized dsa type: " + rsaKDV.getKeyDataName());
+                                        } 
+                                    }
+                                    JAXBElement jaxb = new JAXBElement(new QName("http://www.w3.org/2000/09/xmldsig#", keyValueDataChildKDV.getKeyDataName()), RSAKeyValueType.class, rsaKeyValueType);
+                                    keyValueType.getContent().add(jaxb);
+                                } else {
+                                    throw new RuntimeException("Unrecognized element: " + keyDataDataType);
+                                }
+                            }
+                        }
+                        JAXBElement dataJAXB = new JAXBElement(new QName("http://www.w3.org/2000/09/xmldsig#", tagName), KeyValueType.class, keyValueType);
+                        parentKeyDataList.add(dataJAXB);
+                    } else {
+                        throw new RuntimeException("Unrecognized type: " + dataType);
+                    }
+                } else {
+                    JAXBElement dataJAXB = new JAXBElement(new QName("http://www.w3.org/2000/09/xmldsig#", tagName), contents.getClass(), contents);
+                    parentKeyDataList.add(dataJAXB);
+                }
+            }
+        }
+                
 	public static void mapBusinessNames(List<org.apache.juddi.model.BusinessName> modelNameList, 
 										List<org.uddi.api_v3.Name> apiNameList) 
 				   throws DispositionReportFaultMessage {
@@ -234,7 +485,7 @@
 		for (org.apache.juddi.model.AddressLine modelAddressLine : modelAddressLineList) {
 			org.uddi.api_v3.AddressLine apiAddressLine = new org.uddi.api_v3.AddressLine();
 			apiAddressLine.setKeyName(modelAddressLine.getKeyName());
-			apiAddressLine.setKeyName(modelAddressLine.getKeyValue());
+			apiAddressLine.setKeyValue(modelAddressLine.getKeyValue());
 			apiAddressLine.setValue(modelAddressLine.getLine());
 			apiAddressLineList.add(apiAddressLine);
 		}
@@ -308,6 +559,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 +642,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 +811,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 +927,6 @@
 		keyedRef.setKeyValue(modelPublisherAssertion.getKeyValue());
 		
 		apiPublisherAssertion.setKeyedReference(keyedRef);
-		
 	}
 	
 	public static void mapAssertionStatusItem(org.apache.juddi.model.PublisherAssertion modelPublisherAssertion, 
@@ -831,4 +1083,31 @@
 		apiNode.setSecurityUrl(modelNode.getSecurityUrl());
 		apiNode.setSubscriptionUrl(modelNode.getSubscriptionUrl());
 	}
+
+    private static Object convertDataToTransformContent(String type, byte[] xformBytes) throws RuntimeException {
+        Object transformObject;
+        if (type.equals(String.class.getSimpleName())) {
+            try {
+                transformObject = new String(xformBytes, "UTF-8");
+            } catch (Exception e) {
+                throw new RuntimeException("Error decoding string due to: " + e.getMessage(), e);
+            }
+        } else if (type.equals(byte[].class.getSimpleName())) {
+            transformObject = xformBytes;
+        } else if (type.equals(Element.class.getCanonicalName())) {
+            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+            dbf.setNamespaceAware(true);
+            dbf.setXIncludeAware(true);
+            try {
+                DocumentBuilder db = dbf.newDocumentBuilder();
+                Document doc = db.parse(new ByteArrayInputStream(xformBytes));
+                transformObject = doc.getDocumentElement();
+            } catch (Exception e) {
+                throw new RuntimeException("Failed to parse element due to: " + e.getMessage(), e);
+            }
+        } else {
+            throw new RuntimeException("Unrecognized type: " + type);
+        }
+        return transformObject;
+    }
 }
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,12 @@
     <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.KeyDataValue</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 +43,18 @@
     <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.SignatureTransformDataValue</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 +67,7 @@
     <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>
     
     <properties>
       <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(SchemaAction='dropDB,add')"/>
Index: docs/devguide/en-US/extras/Database_Setup_1.xmlt
===================================================================
--- docs/devguide/en-US/extras/Database_Setup_1.xmlt	(revision 1355564)
+++ docs/devguide/en-US/extras/Database_Setup_1.xmlt	(working copy)
@@ -20,7 +20,10 @@
         <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.CategoryBag</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>
         <class>org.apache.juddi.model.Contact</class>
         <class>org.apache.juddi.model.ContactDescr</class>
         <class>org.apache.juddi.model.DiscoveryUrl</class>
@@ -29,6 +32,11 @@
         <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.KeyDataValue</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>
@@ -36,11 +44,18 @@
         <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.Subscription</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.SignatureTransformDataValue</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>
         <class>org.apache.juddi.model.Tmodel</class>
@@ -62,4 +77,4 @@
                 value="org.hibernate.dialect.DerbyDialect"/>
         </properties>
     </persistence-unit>
-</persistence>
\ No newline at end of file
+</persistence>
Index: docs/userguide/en-US/extras/Database_Setup_1.xmlt
===================================================================
--- docs/userguide/en-US/extras/Database_Setup_1.xmlt	(revision 1355564)
+++ docs/userguide/en-US/extras/Database_Setup_1.xmlt	(working copy)
@@ -20,15 +20,23 @@
         <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.CategoryBag</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>
         <class>org.apache.juddi.model.Contact</class>
         <class>org.apache.juddi.model.ContactDescr</class>
         <class>org.apache.juddi.model.DiscoveryUrl</class>
         <class>org.apache.juddi.model.Email</class>
         <class>org.apache.juddi.model.InstanceDetailsDescr</class>
         <class>org.apache.juddi.model.InstanceDetailsDocDescr</class>
+        <class>org.apache.juddi.model.KeyDataValue</class>
         <class>org.apache.juddi.model.KeyedReference</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>
@@ -36,11 +44,18 @@
         <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.Subscription</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.SignatureTransformDataValue</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>
         <class>org.apache.juddi.model.Tmodel</class>
@@ -62,4 +77,4 @@
                 value="org.hibernate.dialect.DerbyDialect"/>
         </properties>
     </persistence-unit>
-</persistence>
\ No newline at end of file
+</persistence>
Index: juddiv3-war/persistence/hibernate-persistence.xml
===================================================================
--- juddiv3-war/persistence/hibernate-persistence.xml	(revision 1355564)
+++ juddiv3-war/persistence/hibernate-persistence.xml	(working copy)
@@ -19,6 +19,7 @@
     <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.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,12 @@
     <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.KeyDataValue</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,10 +43,18 @@
     <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.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.SignatureTransformDataValue</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>
Index: juddiv3-war/persistence/openjpa-persistence.xml
===================================================================
--- juddiv3-war/persistence/openjpa-persistence.xml	(revision 1355564)
+++ juddiv3-war/persistence/openjpa-persistence.xml	(working copy)
@@ -7,55 +7,67 @@
     <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
     <non-jta-data-source>java:comp/env/jdbc/JuddiDS</non-jta-data-source>
     <!-- entity classes -->
-    <class>org.apache.juddi.model.Address</class>
-    <class>org.apache.juddi.model.AddressLine</class>
-    <class>org.apache.juddi.model.AuthToken</class>
-    <class>org.apache.juddi.model.BindingCategoryBag</class>
-    <class>org.apache.juddi.model.BindingDescr</class>
-    <class>org.apache.juddi.model.BindingTemplate</class>
-    <class>org.apache.juddi.model.BusinessCategoryBag</class>
-    <class>org.apache.juddi.model.BusinessDescr</class>
-    <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.Address</class>
+    <class>org.apache.juddi.model.AddressLine</class>
+    <class>org.apache.juddi.model.AuthToken</class>
+    <class>org.apache.juddi.model.BindingCategoryBag</class>
+    <class>org.apache.juddi.model.BindingDescr</class>
+    <class>org.apache.juddi.model.BindingTemplate</class>
+    <class>org.apache.juddi.model.BusinessCategoryBag</class>
+    <class>org.apache.juddi.model.BusinessDescr</class>
+    <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.CanonicalizationMethod</class>
     <class>org.apache.juddi.model.CategoryBag</class>
     <class>org.apache.juddi.model.Clerk</class>
-    <class>org.apache.juddi.model.ClientSubscriptionInfo</class>
-    <class>org.apache.juddi.model.Contact</class>
-    <class>org.apache.juddi.model.ContactDescr</class>
-    <class>org.apache.juddi.model.DiscoveryUrl</class>
-    <class>org.apache.juddi.model.Email</class>
-    <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.Node</class>
-    <class>org.apache.juddi.model.OverviewDoc</class>
-    <class>org.apache.juddi.model.OverviewDocDescr</class>
-    <class>org.apache.juddi.model.PersonName</class>
-    <class>org.apache.juddi.model.Phone</class>
-    <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.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.ClientSubscriptionInfo</class>
+    <class>org.apache.juddi.model.Contact</class>
+    <class>org.apache.juddi.model.ContactDescr</class>
+    <class>org.apache.juddi.model.DiscoveryUrl</class>
+    <class>org.apache.juddi.model.Email</class>
+    <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.KeyDataValue</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>
+    <class>org.apache.juddi.model.Phone</class>
+    <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.SignatureTransformDataValue</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>
-    <class>org.apache.juddi.model.Tmodel</class>
-    <class>org.apache.juddi.model.TmodelCategoryBag</class>
-    <class>org.apache.juddi.model.TmodelDescr</class>
-    <class>org.apache.juddi.model.TmodelIdentifier</class>
-    <class>org.apache.juddi.model.TmodelInstanceInfo</class>
-    <class>org.apache.juddi.model.TmodelInstanceInfoDescr</class>
-    <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.SubscriptionChunkToken</class>
+    <class>org.apache.juddi.model.SubscriptionMatch</class>
+    <class>org.apache.juddi.model.Tmodel</class>
+    <class>org.apache.juddi.model.TmodelCategoryBag</class>
+    <class>org.apache.juddi.model.TmodelDescr</class>
+    <class>org.apache.juddi.model.TmodelIdentifier</class>
+    <class>org.apache.juddi.model.TmodelInstanceInfo</class>
+    <class>org.apache.juddi.model.TmodelInstanceInfoDescr</class>
+    <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>
     <properties>
       <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(SchemaAction='add')"/>
       <property name="openjpa.Log" value="DefaultLevel=WARN, Tool=INFO"/>
Index: uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_030_BusinessEntityIntegrationTest.java
===================================================================
--- uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_030_BusinessEntityIntegrationTest.java	(revision 1355564)
+++ uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_030_BusinessEntityIntegrationTest.java	(working copy)
@@ -73,8 +73,18 @@
 	     } 
 	}
 	
+	@Test
+	public void testJoePublisherBusinessEntitySignature() {
+		try {
+			tckTModel.saveJoePublisherTmodel(authInfoJoe);
+			tckBusiness.saveJoePublisherBusinessX509Signature(authInfoJoe);
+			tckFindEntity.findAllBusiness();
+			tckBusiness.deleteJoePublisherBusiness(authInfoJoe);
+		} finally {
+			tckTModel.deleteJoePublisherTmodel(authInfoJoe);
+		}
+	}
 	
-	
 	@Test
 	public void testJoePublisherBusinessEntity() {
 		try {
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,12 +19,19 @@
  * @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;
 
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
+import javax.xml.bind.JAXB;
+import javax.xml.bind.JAXBElement;
+import javax.xml.transform.dom.DOMResult;
+import javax.xml.transform.dom.DOMSource;
+import org.custommonkey.xmlunit.Diff;
+import org.custommonkey.xmlunit.XMLUnit;
 
 import org.uddi.api_v3.BindingTemplate;
 import org.uddi.api_v3.BindingTemplates;
@@ -43,6 +50,20 @@
 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;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
 
 public class TckValidator {
 
@@ -104,6 +125,198 @@
 		}
 	}
 	
+        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());
+
+            DOMResult domResult1 = new DOMResult();
+            DOMResult domResult2 = new DOMResult();
+            JAXB.marshal(kit1, domResult1);
+            JAXB.marshal(kit2, domResult2);
+            
+            Document doc1 = (Document)domResult1.getNode();
+            DOMSource domSource1 = new DOMSource(doc1.getDocumentElement());
+            Document doc2 = (Document)domResult2.getNode();
+            DOMSource domSource2 = new DOMSource(doc2.getDocumentElement());
+            XMLUnit.setIgnoreAttributeOrder(true);
+            XMLUnit.setIgnoreComments(true);
+            XMLUnit.setIgnoreWhitespace(true);
+            Diff diff = new Diff(domSource1, domSource2);
+            assertTrue("Key info elements should match", diff.similar());
+        }
+        
+        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());
+                    checkTransformContentList(tx1.getContent(), tx2.getContent());
+            }
+        }
+        
+        public static void checkTransformContentList(List<Object> list1, List<Object> list2) {
+            if (list1 == null || list2 == null) {
+                assertEquals(list1, list2);
+                return;
+            }
+            assertEquals(list1.size(), list2.size());
+            
+            Iterator<Object> list1Itr = list1.iterator();
+            Iterator<Object> list2Itr = list2.iterator();
+            while (list1Itr.hasNext()) {
+                Object obj1 = list1Itr.next();
+                Object obj2 = list2Itr.next();
+
+                if (obj1 instanceof String) {
+                    assertEquals((String)obj1, obj2);
+                } else if (obj1 instanceof Element || obj1 instanceof JAXBElement) {
+                    if (obj1 instanceof JAXBElement) {
+                        DOMResult domResult = new DOMResult();
+                        JAXB.marshal(obj1, domResult);
+                        obj1 = ((Document)domResult.getNode()).getDocumentElement();
+                    }
+                    if (obj2 instanceof JAXBElement) {
+                        DOMResult domResult = new DOMResult();
+                        JAXB.marshal(obj2, domResult);
+                        obj2 = ((Document)domResult.getNode()).getDocumentElement();
+                    }
+                    XMLUnit.setIgnoreAttributeOrder(true);
+                    XMLUnit.setIgnoreComments(true);
+                    DOMSource domSrc1 = new DOMSource((Element)obj1);
+                    DOMSource domSrc2 = new DOMSource((Element)obj2);
+                    Diff diff = new Diff(domSrc1, domSrc2);
+                    assertTrue("Element should be the same", diff.similar());
+                } else {
+                    throw new RuntimeException("Unrecognized type: " + obj1.getClass());
+                }
+            }
+        }
+        
+        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)
@@ -14,11 +14,22 @@
  */
 package org.apache.juddi.v3.tck;
 
+import java.io.FileInputStream;
+import java.net.URL;
 import static junit.framework.Assert.assertEquals;
 import static junit.framework.Assert.assertNotNull;
+import static junit.framework.Assert.assertTrue;
 
 import java.rmi.RemoteException;
+import java.security.KeyStore;
+import java.security.PrivateKey;
+import java.security.PublicKey;
+import java.security.cert.Certificate;
+import java.util.Arrays;
 import java.util.List;
+import javax.xml.bind.JAXB;
+import javax.xml.transform.dom.DOMResult;
+import javax.xml.transform.dom.DOMSource;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -32,6 +43,8 @@
 import org.uddi.api_v3.SaveBusiness;
 import org.uddi.v3_service.UDDIInquiryPortType;
 import org.uddi.v3_service.UDDIPublicationPortType;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
 /**
  * @author <a href="mailto:kstam@apache.org">Kurt T Stam</a>
  * @author <a href="mailto:jfaath@apache.org">Jeff Faath</a>
@@ -53,6 +66,10 @@
     public final static String RIFTSAW_BUSINESS_KEY    = "uddi:riftsaw.jboss.org:business_redhat-jboss";
     public final static String RIFTSAW_BUSINESS_XML    = "uddi_data/bpel/riftsaw/businessEntity.xml";
 
+    final static String SIGNATURE_KEYSTORE = "uddi_data/signature/signature.jks";
+    final static String SIGNATURE_KEYSTORE_TYPE = "JKS";
+    final static String SIGNATURE_KEYSTORE_PASSWORD = "changeit";
+    final static String SIGNATURE_KEYSTORE_ALIAS = "mykey";
     
     private Log logger = LogFactory.getLog(this.getClass());
 	private UDDIPublicationPortType publication = null;
@@ -85,8 +102,14 @@
 		deleteBusinesses(authInfoSam, SAM_BUSINESS_XML, SAM_BUSINESS_KEY, numberOfCopies);
 	}
 	
+        public void saveJoePublisherBusinessX509Signature(String authInfoJoe) {
+            saveBusiness(authInfoJoe, JOE_BUSINESS_XML, JOE_BUSINESS_KEY);
+            signBusiness(authInfoJoe, JOE_BUSINESS_KEY);
+            verifyBusinessSignature(authInfoJoe, JOE_BUSINESS_KEY);
+        }
+        
 	public void saveJoePublisherBusiness(String authInfoJoe) {
-		saveBusiness(authInfoJoe, JOE_BUSINESS_XML, JOE_BUSINESS_KEY);
+		saveBusiness(authInfoJoe, JOE_BUSINESS_XML, JOE_BUSINESS_KEY, true);
     }
 	
 	public void saveCombineCatBagsPublisherBusiness(String authInfoJoe) {
@@ -176,8 +199,91 @@
 			Assert.fail("No exception should be thrown");
 		}
 	}
-		
-	public void saveBusiness(String authInfo, String businessXML, String businessKey) {
+	
+        public void signBusiness(String authInfo, String businessKey) {
+            try {
+                GetBusinessDetail gb = new GetBusinessDetail();
+                gb.getBusinessKey().add(businessKey);
+                BusinessDetail bd = inquiry.getBusinessDetail(gb);
+                List<BusinessEntity> beOutList = bd.getBusinessEntity();
+                BusinessEntity bizEntity = beOutList.get(0);
+                bizEntity.getSignature().clear();
+                BusinessEntity bizEntitySigned = signJAXBObject(bizEntity);
+                        
+                SaveBusiness sb = new SaveBusiness();
+                sb.setAuthInfo(authInfo);
+                sb.getBusinessEntity().add(bizEntitySigned);
+                publication.saveBusiness(sb);
+            } catch(Throwable e) {
+                logger.error(e.getMessage(),e);
+                Assert.fail("No exception should be thrown");
+            }
+        }
+        
+        public void verifyBusinessSignature(String authInfo, String businessKey) {
+            try {
+                GetBusinessDetail gb = new GetBusinessDetail();
+                gb.getBusinessKey().add(businessKey);
+                BusinessDetail bd = inquiry.getBusinessDetail(gb);
+                List<BusinessEntity> beOutList = bd.getBusinessEntity();
+                BusinessEntity bizEntity = beOutList.get(0);
+                        
+                boolean sigOk = verifySignedJAXBObject(bizEntity);
+                assertTrue("Signature invalid!", sigOk);
+            } catch(Throwable e) {
+                logger.error(e.getMessage(),e);
+                Assert.fail("No exception should be thrown");
+            }
+        }
+        
+        private <T> T signJAXBObject(T jaxbObj) {
+            DOMResult domResult = new DOMResult();
+            JAXB.marshal(jaxbObj, domResult);
+            Document doc = ((Document)domResult.getNode());
+            Element docElement = doc.getDocumentElement();
+
+            try {            
+                KeyStore ks = KeyStore.getInstance(SIGNATURE_KEYSTORE_TYPE);
+                URL url = Thread.currentThread().getContextClassLoader().getResource(SIGNATURE_KEYSTORE);
+                ks.load(url.openStream(), SIGNATURE_KEYSTORE_PASSWORD.toCharArray());
+                KeyStore.PrivateKeyEntry keyEntry = (KeyStore.PrivateKeyEntry)ks.getEntry(SIGNATURE_KEYSTORE_ALIAS, new KeyStore.PasswordProtection(SIGNATURE_KEYSTORE_PASSWORD.toCharArray()));
+                PrivateKey privateKey = keyEntry.getPrivateKey();
+                Certificate origCert = keyEntry.getCertificate();
+                PublicKey validatingKey = origCert.getPublicKey();
+                TckSigningUtil.signDOM(docElement, privateKey, origCert);
+
+                DOMSource domSource = new DOMSource(doc);
+                T result = (T)JAXB.unmarshal(domSource, jaxbObj.getClass());
+                return result;
+            } catch (Exception e) {
+                throw new RuntimeException("Signature failure due to: " + e.getMessage(), e);
+            }
+        }
+        
+        private boolean verifySignedJAXBObject(Object obj) {
+            try {
+                DOMResult domResult = new DOMResult();
+                JAXB.marshal(obj, domResult);
+                Document doc = ((Document)domResult.getNode());
+                Element docElement = doc.getDocumentElement();
+
+                KeyStore ks = KeyStore.getInstance(SIGNATURE_KEYSTORE_TYPE);
+                URL url = Thread.currentThread().getContextClassLoader().getResource(SIGNATURE_KEYSTORE);
+                ks.load(url.openStream(), SIGNATURE_KEYSTORE_PASSWORD.toCharArray());
+                KeyStore.PrivateKeyEntry keyEntry = (KeyStore.PrivateKeyEntry)ks.getEntry(SIGNATURE_KEYSTORE_ALIAS, new KeyStore.PasswordProtection(SIGNATURE_KEYSTORE_PASSWORD.toCharArray()));
+                PrivateKey privateKey = keyEntry.getPrivateKey();
+                Certificate origCert = keyEntry.getCertificate();
+                PublicKey validatingKey = origCert.getPublicKey();
+                return TckSigningUtil.verifySignature(docElement, validatingKey);
+            } catch (Exception e) {
+                throw new RuntimeException (e);
+            }
+        }
+        
+        public void saveBusiness(String authInfo, String businessXML, String businessKey) {
+            saveBusiness(authInfo, businessXML, businessKey, false);
+        }
+	public void saveBusiness(String authInfo, String businessXML, String businessKey, boolean serialize) {
 		try {
 			SaveBusiness sb = new SaveBusiness();
 			sb.setAuthInfo(authInfo);
@@ -194,6 +300,10 @@
 			List<BusinessEntity> beOutList = bd.getBusinessEntity();
 			BusinessEntity beOut = beOutList.get(0);
 
+                        if (serialize) {
+                            JAXB.marshal(beOut, new java.io.File("aftersave.xml"));
+                        }
+                        
 			assertEquals(beIn.getBusinessKey(), beOut.getBusinessKey());
 			
 			TckValidator.checkNames(beIn.getName(), beOut.getName());
@@ -201,7 +311,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/java/org/apache/juddi/v3/tck/TckSigningUtil.java
===================================================================
--- uddi-tck-base/src/main/java/org/apache/juddi/v3/tck/TckSigningUtil.java	(revision 0)
+++ uddi-tck-base/src/main/java/org/apache/juddi/v3/tck/TckSigningUtil.java	(revision 0)
@@ -0,0 +1,165 @@
+package org.apache.juddi.v3.tck;
+
+import java.io.BufferedReader;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.security.InvalidAlgorithmParameterException;
+import java.security.NoSuchAlgorithmException;
+import java.security.PrivateKey;
+import java.security.PublicKey;
+import java.security.cert.Certificate;
+import java.security.cert.X509Certificate;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.xml.crypto.dsig.CanonicalizationMethod;
+import javax.xml.crypto.dsig.DigestMethod;
+import javax.xml.crypto.dsig.Reference;
+import javax.xml.crypto.dsig.SignatureMethod;
+import javax.xml.crypto.dsig.SignedInfo;
+import javax.xml.crypto.dsig.Transform;
+import javax.xml.crypto.dsig.XMLSignature;
+import javax.xml.crypto.dsig.XMLSignatureFactory;
+import javax.xml.crypto.dsig.dom.DOMSignContext;
+import javax.xml.crypto.dsig.dom.DOMValidateContext;
+import javax.xml.crypto.dsig.keyinfo.KeyInfo;
+import javax.xml.crypto.dsig.keyinfo.KeyInfoFactory;
+import javax.xml.crypto.dsig.keyinfo.X509Data;
+import javax.xml.crypto.dsig.spec.C14NMethodParameterSpec;
+import javax.xml.crypto.dsig.spec.TransformParameterSpec;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+public class TckSigningUtil {
+
+    private static XMLSignatureFactory initXMLSigFactory() {
+        XMLSignatureFactory fac = XMLSignatureFactory.getInstance();
+        return fac;
+    }
+
+    private static Reference initReference(XMLSignatureFactory fac) throws NoSuchAlgorithmException, InvalidAlgorithmParameterException {
+        List transformers = new ArrayList();
+        transformers.add(fac.newTransform(Transform.ENVELOPED, (TransformParameterSpec) null));
+        Reference ref = fac.newReference("", fac.newDigestMethod(DigestMethod.SHA1, null), transformers, null, null);
+        return ref;
+    }
+
+    private static SignedInfo initSignedInfo(XMLSignatureFactory fac) throws Exception {
+        Reference ref = initReference(fac);
+        SignedInfo si = fac.newSignedInfo(fac.newCanonicalizationMethod(CanonicalizationMethod.EXCLUSIVE, (C14NMethodParameterSpec) null), fac.newSignatureMethod(SignatureMethod.DSA_SHA1, null), Collections.singletonList(ref));
+        return si;
+    }
+
+    public static boolean verifySignature(Element element, PublicKey validatingKey) {
+        XMLSignatureFactory fac = initXMLSigFactory();
+        NodeList nl = element.getElementsByTagNameNS(XMLSignature.XMLNS, "Signature");
+        if (nl.getLength() == 0) {
+            throw new RuntimeException("Cannot find Signature element");
+        }
+        DOMValidateContext valContext = new DOMValidateContext(validatingKey, nl.item(0));
+        try {
+            valContext.setProperty("javax.xml.crypto.dsig.cacheReference", Boolean.TRUE);
+            XMLSignature signature = fac.unmarshalXMLSignature(valContext);
+            boolean coreValidity = signature.validate(valContext);
+            // Check core validation status.
+            if (coreValidity == false) {
+                System.err.println("Signature failed core validation");
+                boolean sv = signature.getSignatureValue().validate(valContext);
+                System.out.println("signature validation status: " + sv);
+                // Check the validation status of each Reference.
+                @SuppressWarnings("unchecked")
+                Iterator<Reference> i = signature.getSignedInfo().getReferences().iterator();
+                System.out.println("---------------------------------------------");
+                for (int j = 0; i.hasNext(); j++) {
+                    Reference ref = (Reference) i.next();
+                    boolean refValid = ref.validate(valContext);
+                    System.out.println("ref[" + j + "] validity status: " + refValid);
+                    System.out.println("Ref type: " + ref.getType() + ", URI: " + ref.getURI());
+                    for (Object xform : ref.getTransforms()) {
+                        System.out.println("Transform: " + xform);
+                    }
+                    String calcDigValStr = digestToString(ref.getCalculatedDigestValue());
+                    String expectedDigValStr = digestToString(ref.getDigestValue());
+                    System.out.println("    Calc Digest: " + calcDigValStr);
+                    System.out.println("Expected Digest: " + expectedDigValStr);
+                    InputStream is = ref.getDigestInputStream();
+                    InputStreamReader isr = new InputStreamReader(is);
+                    BufferedReader br = new BufferedReader(isr);
+                    String line;
+                    while ((line = br.readLine()) != null) {
+                        System.out.println(line);
+                    }
+                    is.close();
+                    System.out.println("---------------------------------------------");
+                }
+            } else {
+                System.out.println("Signature passed core validation");
+            }
+            return coreValidity;
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    private static String digestToString(byte[] digest) {
+        StringBuilder sb = new StringBuilder();
+        for (byte b : digest) {
+            String hex = Integer.toHexString(0xFF & b);
+            if (hex.length() == 1) {
+                sb.append('0');
+            }
+            sb.append(hex);
+        }
+        return sb.toString();
+    }
+
+    public static void signDOM(Node node, PrivateKey privateKey, Certificate origCert) {
+        XMLSignatureFactory fac = initXMLSigFactory();
+        X509Certificate cert = (X509Certificate) origCert;
+        // Create the KeyInfo containing the X509Data.
+        KeyInfoFactory kif = fac.getKeyInfoFactory();
+        List<Object> x509Content = new ArrayList<Object>();
+        x509Content.add(cert.getSubjectX500Principal().getName());
+        x509Content.add(cert);
+        X509Data xd = kif.newX509Data(x509Content);
+        KeyInfo ki = kif.newKeyInfo(Collections.singletonList(xd));
+
+        // Create a DOMSignContext and specify the RSA PrivateKey and
+        // location of the resulting XMLSignature's parent element.
+        DOMSignContext dsc = new DOMSignContext(privateKey, node);
+        dsc.putNamespacePrefix("http://www.w3.org/2000/09/xmldsig#", "ns2");
+
+        // Create the XMLSignature, but don't sign it yet.
+        try {
+            SignedInfo si = initSignedInfo(fac);
+            XMLSignature signature = fac.newXMLSignature(si, ki);
+
+            // Marshal, generate, and sign the enveloped signature.
+            signature.sign(dsc);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+    
+    public static void serializeNode(Node node, String filename) {
+        try {
+            Transformer xform = TransformerFactory.newInstance().newTransformer();
+            DOMSource domSrc = new DOMSource(node);
+            FileOutputStream fos = new FileOutputStream(filename);
+            StreamResult streamResult = new StreamResult(fos);
+            xform.transform(domSrc, streamResult);
+            fos.close();
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+}
Index: uddi-tck-base/src/main/resources/uddi_data/signature/signature.jks
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: uddi-tck-base/src/main/resources/uddi_data/signature/signature.jks
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

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,14 @@
  * 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#"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://www.w3.org/2000/09/xmldsig# http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd"
+>
   <discoveryURLs>
     <discoveryURL useType="home">http://www.businessone.com</discoveryURL>
     <discoveryURL useType="serviceList">http://www.businessone.com/services</discoveryURL>
@@ -57,4 +64,65 @@
   <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/TR/1999/REC-xpath-19991116">
+                    <ns2:XPath>
+                        not(ancestor-or-self::Signature)
+                    </ns2:XPath>
+                    <a xmlns="http://mycustomernamespace/" xmlns:myotherothersigprefix="http://www.other2.com/">
+                    </a>
+                   </ns2:Transform>
+              </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:KeyName>Test Key Name</ns2:KeyName>
+          <ns2:KeyValue>
+              <ns2:DSAKeyValue>
+                  <ns2:P>TstP</ns2:P>
+                  <ns2:Q>TstQ</ns2:Q>
+                  <ns2:G>TstG</ns2:G>
+                  <ns2:Y>TstY</ns2:Y>
+                  <ns2:J>TstJ</ns2:J>
+                  <ns2:Seed>TestSeed</ns2:Seed>
+                  <ns2:PgenCounter>TestPGenCounter</ns2:PgenCounter>
+              </ns2:DSAKeyValue>
+              <ns2:RSAKeyValue>
+                  <ns2:Modulus>xA7SEU+e0yQH5rm9kbCDN9o3aPIo7HbP7tX6WOocLZAtNfyxSZDU16ksL6W
+      jubafOqNEpcwR3RdFsT7bCqnXPBe5ELh5u4VEy19MzxkXRgrMvavzyBpVRgBUwUlV
+      5foK5hhmbktQhyNdy/6LpQRhDUDsTvK+g9Ucj47es9AQJ3U=</ns2:Modulus>
+                  <ns2:Exponent>AQAB</ns2:Exponent>
+              </ns2:RSAKeyValue>
+          </ns2:KeyValue>
+          <ns2:MgmtData>Test Mgmt Data</ns2:MgmtData>
+          <ns2:RetrievalMethod Type="TestType" URI="TestURI">
+              <ns2:Transforms>
+                  <ns2:Transform Algorithm="http://www.w3.org/TR/1999/REC-xpath-19991116">
+                    <ns2:XPath xmlns:mydsigprefix="http://www.w3.org/2000/09/xmldsig#">
+                        not(ancestor-or-self::mydsigprefix:RetrievalMethod)
+                    </ns2:XPath>
+                   </ns2:Transform>
+              </ns2:Transforms>
+          </ns2:RetrievalMethod>
+          <ns2:PGPData>
+              <ns2:PGPKeyID>TstKeyID</ns2:PGPKeyID>
+              <ns2:PGPKeyPacket>TestPGPKeyPacket</ns2:PGPKeyPacket>
+          </ns2:PGPData>
+          <ns2:SPKIData>
+              <ns2:SPKISexp>TestSPKISexp</ns2:SPKISexp>
+          </ns2:SPKIData>
+          <ns2:X509Data 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:X509Data>
+      </ns2:KeyInfo>
+  </ns2:Signature>
 </businessEntity>
\ No newline at end of file
Index: uddi-tck-base/pom.xml
===================================================================
--- uddi-tck-base/pom.xml	(revision 1355564)
+++ uddi-tck-base/pom.xml	(working copy)
@@ -35,5 +35,11 @@
 			<artifactId>junit</artifactId>
 			<version>4.5</version>
 		</dependency>
+                <dependency>
+                        <groupId>xmlunit</groupId>
+                        <artifactId>xmlunit</artifactId>
+                        <version>1.3</version>
+                </dependency>
+
 	</dependencies>
 </project>
\ No newline at end of file
