Index: juddi-core/src/main/java/org/apache/juddi/mapping/MappingApiToModel.java =================================================================== --- juddi-core/src/main/java/org/apache/juddi/mapping/MappingApiToModel.java (revision 1542631) +++ juddi-core/src/main/java/org/apache/juddi/mapping/MappingApiToModel.java (working copy) @@ -56,6 +56,7 @@ import org.w3._2000._09.xmldsig_.TransformType; import org.w3._2000._09.xmldsig_.TransformsType; import org.w3._2000._09.xmldsig_.X509DataType; +import org.w3._2000._09.xmldsig_.X509IssuerSerialType; import org.w3c.dom.DOMException; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -861,6 +862,14 @@ modelKeyInfoValue.setKeyDataValueBytes((byte[])x509IssuerSerialOrX509SKIOrX509SubjectName); } else if (x509IssuerSerialOrX509SKIOrX509SubjectName instanceof String) { modelKeyInfoValue.setKeyDataValueString((String)x509IssuerSerialOrX509SKIOrX509SubjectName); + } else if (x509IssuerSerialOrX509SKIOrX509SubjectName instanceof X509IssuerSerialType) { + logger.fatal("HELLO!! API2MODEL X509IssuerSerial"); + X509IssuerSerialType x= (X509IssuerSerialType)x509IssuerSerialOrX509SKIOrX509SubjectName; + modelKeyInfoValue.setKeyDataType("X509IssuerSerial"); + modelKeyInfoValue.setKeyDataName(x.getX509IssuerName()); + modelKeyInfoValue.setKeyDataValueString(x.getX509SerialNumber().toString()); + //modelKeyInfoValue.setKeyDataValueString((String)x509IssuerSerialOrX509SKIOrX509SubjectName); + //x509IssuerSerialOrX509SKIOrX509SubjectName X509IssuerSerialType #462 } else if (x509IssuerSerialOrX509SKIOrX509SubjectName != null) { throw new RuntimeException("Unrecognized Value for Element: " + tagName + ": " + x509IssuerSerialOrX509SKIOrX509SubjectName.getClass().getCanonicalName()); } Index: juddi-core/src/main/java/org/apache/juddi/mapping/MappingModelToApi.java =================================================================== --- juddi-core/src/main/java/org/apache/juddi/mapping/MappingModelToApi.java (revision 1542619) +++ juddi-core/src/main/java/org/apache/juddi/mapping/MappingModelToApi.java (working copy) @@ -18,6 +18,7 @@ package org.apache.juddi.mapping; import java.io.ByteArrayInputStream; +import java.math.BigInteger; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -56,6 +57,7 @@ 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_.ObjectFactory; import org.w3._2000._09.xmldsig_.PGPDataType; import org.w3._2000._09.xmldsig_.RSAKeyValueType; import org.w3._2000._09.xmldsig_.ReferenceType; @@ -68,6 +70,7 @@ import org.w3._2000._09.xmldsig_.TransformType; import org.w3._2000._09.xmldsig_.TransformsType; import org.w3._2000._09.xmldsig_.X509DataType; +import org.w3._2000._09.xmldsig_.X509IssuerSerialType; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -209,9 +212,23 @@ byte[] contentBytes = modelKeyDataValue.getKeyDataValueBytes(); String contentStr = modelKeyDataValue.getKeyDataValueString(); Object contents = contentBytes != null ? contentBytes : contentStr; - + logger.fatal("HELLO! MODEL2API " + dataType + " " + tagName + " " + modelKeyDataValue.getKeyDataValueString() ); if (contents == null) { List childKeyDataList = new ArrayList(); + if (dataType.equalsIgnoreCase("X509IssuerSerial")){ + logger.fatal("HELLO NURSE! MODEL2API " + dataType + " " + tagName + " " + modelKeyDataValue.getKeyDataValueString() ); + X509DataType container = new X509DataType(); + X509IssuerSerialType xis = new X509IssuerSerialType(); + xis.setX509IssuerName(tagName); + xis.setX509SerialNumber(new BigInteger(modelKeyDataValue.getKeyDataValueString())); + ObjectFactory of = new ObjectFactory(); + container.getX509IssuerSerialOrX509SKIOrX509SubjectName().add( + new JAXBElement(new QName("http://www.w3.org/2000/09/xmldsig#", "X509Issuer"), X509IssuerSerialType.class, xis) + ); + + JAXBElement dataJAXB = new JAXBElement(new QName("http://www.w3.org/2000/09/xmldsig#", "X509Data"), X509DataType.class, container); + parentKeyDataList.add(dataJAXB); + }else if (dataType.equals(X509DataType.class.getSimpleName())) { X509DataType x509DataType = new X509DataType(); mapModelKeyDataValue(modelKeyDataValue.getKeyDataValueList(), childKeyDataList); @@ -260,6 +277,24 @@ JAXBElement dataJAXB = new JAXBElement(new QName("http://www.w3.org/2000/09/xmldsig#", tagName), PGPDataType.class, pgpDataType); parentKeyDataList.add(dataJAXB); + } else if (dataType.equals(X509IssuerSerialType.class.getSimpleName()) || + dataType.equals("X509IssuerSerial")) { + logger.fatal("HELLO! X509IssuerSerial"); + logger.fatal("HELLO! " + modelKeyDataValue.getKeyDataName() +" " + modelKeyDataValue.getKeyDataType() + " " +modelKeyDataValue.getKeyDataValueString()); + X509DataType container = new X509DataType(); + X509IssuerSerialType xis = new X509IssuerSerialType(); + xis.setX509IssuerName(modelKeyDataValue.getKeyDataName()); + xis.setX509SerialNumber(new BigInteger(modelKeyDataValue.getKeyDataValueString())); + ObjectFactory of = new ObjectFactory(); + container.getX509IssuerSerialOrX509SKIOrX509SubjectName().add( + //of.createX509DataTypeX509IssuerSerial(xis)); + new JAXBElement(new QName("http://www.w3.org/2000/09/xmldsig#", "X509Issuer"), X509IssuerSerialType.class, xis) + ); + + JAXBElement dataJAXB = new JAXBElement(new QName("http://www.w3.org/2000/09/xmldsig#", "X509Data"), X509DataType.class, container); + parentKeyDataList.add(dataJAXB); + //parentKeyDataList.add(of.createX509Data(container)); + } else if (dataType.equals(SPKIDataType.class.getSimpleName())) { SPKIDataType spkiDataType = new SPKIDataType(); Index: juddi-core/src/test/java/org/apache/juddi/api/impl/API_141_JIRATest.java =================================================================== --- juddi-core/src/test/java/org/apache/juddi/api/impl/API_141_JIRATest.java (revision 1542619) +++ juddi-core/src/test/java/org/apache/juddi/api/impl/API_141_JIRATest.java (working copy) @@ -17,6 +17,7 @@ import java.security.cert.CertificateException; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.atomic.AtomicReference; import javax.xml.soap.SOAPFault; @@ -24,6 +25,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.juddi.Registry; +import org.apache.juddi.jaxb.PrintUDDI; import org.apache.juddi.v3.client.UDDIConstants; import org.apache.juddi.v3.client.config.UDDIClient; import org.apache.juddi.v3.client.cryptor.DigSigUtil; @@ -55,6 +57,7 @@ import org.uddi.api_v3.FindQualifiers; import org.uddi.api_v3.FindService; import org.uddi.api_v3.FindTModel; +import org.uddi.api_v3.GetBusinessDetail; import org.uddi.api_v3.KeyedReference; import org.uddi.api_v3.Name; import org.uddi.api_v3.SaveBinding; @@ -912,7 +915,7 @@ BusinessDetail saveBusiness = publication.saveBusiness(sb); Assert.fail("unexpected success"); } catch (Exception ex) { - logger.info("Expected failure: "+ ex.getMessage()); + logger.info("Expected failure: " + ex.getMessage()); throw ex; } } @@ -1090,28 +1093,26 @@ logger.info("Expected failure: " + ex.getMessage()); } } - - + @Test() public void JUDDI_712_SaveTModelWithSignature() throws CertificateException { SaveTModel sb = new SaveTModel(); sb.setAuthInfo(authInfoJoe); DigSigUtil ds = GetDigSig(); TModel bs = new TModel(); - bs.setName(new Name("Joe's Tmodel",null)); + bs.setName(new Name("Joe's Tmodel", null)); bs = ds.signUddiEntity(bs); - + sb.getTModel().add(bs); try { publication.saveTModel(sb); Assert.fail("unexpected success"); } catch (Exception ex) { - logger.info("Expected failure: "+ ex.getMessage()); + logger.info("Expected failure: " + ex.getMessage()); } } - - + @Test() public void JUDDI_712_SaveService4BTWithSignature() throws CertificateException { SaveBusiness sb = new SaveBusiness(); @@ -1139,7 +1140,7 @@ bt.setBindingKey(TckBusinessService.JOE_BINDING_KEY_1); bt.setServiceKey(null); bt.setAccessPoint(new AccessPoint("http://localhost", "wsdl")); - + bs.getName().add(new Name("Joe's bs", null)); DigSigUtil ds = GetDigSig(); bt = ds.signUddiEntity(bt); @@ -1156,7 +1157,7 @@ logger.info("Expected failure: " + ex.getMessage()); } } - + @Test() public void JUDDI_712_SaveService5BTWithSignature() throws CertificateException { SaveBusiness sb = new SaveBusiness(); @@ -1184,7 +1185,7 @@ bt.setBindingKey(null); bt.setServiceKey(null); bt.setAccessPoint(new AccessPoint("http://localhost", "wsdl")); - + bs.getName().add(new Name("Joe's bs", null)); DigSigUtil ds = GetDigSig(); bt = ds.signUddiEntity(bt); @@ -1201,7 +1202,7 @@ logger.info("Expected failure: " + ex.getMessage()); } } - + @Test() public void JUDDI_712_SaveService6BTWithSignature() throws CertificateException { SaveBusiness sb = new SaveBusiness(); @@ -1229,7 +1230,7 @@ bt.setBindingKey(null); bt.setServiceKey(TckBusinessService.JOE_SERVICE_KEY); bt.setAccessPoint(new AccessPoint("http://localhost", "wsdl")); - + bs.getName().add(new Name("Joe's bs", null)); DigSigUtil ds = GetDigSig(); bt = ds.signUddiEntity(bt); @@ -1246,11 +1247,9 @@ logger.info("Expected failure: " + ex.getMessage()); } } - - - + @Test() - public void JUDDI_712_SaveBindingWithSignature() throws CertificateException { + public void JUDDI_712_SaveBusinessWithSignature() throws CertificateException { SaveBusiness sb = new SaveBusiness(); sb.setAuthInfo(authInfoJoe); BusinessEntity be = new BusinessEntity(); @@ -1271,46 +1270,77 @@ BusinessService bs = new BusinessService(); bs.setBusinessKey(TckBusiness.JOE_BUSINESS_KEY); bs.setServiceKey(TckBusinessService.JOE_SERVICE_KEY); - bs.getName().add(new Name("joe's service",null)); - - + bs.getName().add(new Name("joe's service", null)); + + be.setBusinessServices(new BusinessServices()); be.getBusinessServices().getBusinessService().add(bs); sb.getBusinessEntity().add(be); - ServiceDetail saveService=null; + ServiceDetail saveService = null; ss.getBusinessService().add(bs); try { - saveService = publication.saveService(ss); + saveService = publication.saveService(ss); } catch (Exception ex) { //logger.error("unExpected failure: ",ex); Assert.fail("unexpected failure " + ex.getMessage() + ex.toString()); } - - + + bs = saveService.getBusinessService().get(0); bs.setBindingTemplates(new BindingTemplates()); BindingTemplate bt = new BindingTemplate(); bt.setBindingKey(null); bt.setServiceKey(TckBusinessService.JOE_SERVICE_KEY); bt.setAccessPoint(new AccessPoint("http://localhost", "wsdl")); - + bs.getName().add(new Name("Joe's bs", null)); DigSigUtil ds = GetDigSig(); bt = ds.signUddiEntity(bt); bs.getBindingTemplates().getBindingTemplate().add(bt); - - try { - SaveBinding sb1 = new SaveBinding(); - sb1.setAuthInfo(authInfoJoe); - sb1.getBindingTemplate().add(bt); - publication.saveBinding(sb1); - Assert.fail("unexpected success"); + + try { + SaveBinding sb1 = new SaveBinding(); + sb1.setAuthInfo(authInfoJoe); + sb1.getBindingTemplate().add(bt); + publication.saveBinding(sb1); + Assert.fail("unexpected success"); } catch (Exception ex) { logger.info("Expected failure: " + ex.getMessage()); } } - - + + @Test() + public void JUDDI_716_SaveBusinessWithSignatureX509IssuerSerial() throws CertificateException { + SaveBusiness sb = new SaveBusiness(); + sb.setAuthInfo(authInfoJoe); + BusinessEntity be = new BusinessEntity(); + be.setBusinessKey(TckBusiness.JOE_BUSINESS_KEY); + + Name n = new Name(); + n.setValue("JUDDI_716_SaveBusinessWithSignatureX509IssuerSerial"); + be.getName().add(n); + DigSigUtil ds = GetDigSig(); + ds.put(DigSigUtil.SIGNATURE_OPTION_CERT_INCLUSION_SERIAL, "true"); + be = ds.signUddiEntity(be); + sb.getBusinessEntity().add(be); + try { + BusinessDetail saveBusiness = publication.saveBusiness(sb); + GetBusinessDetail gsb=new GetBusinessDetail(); + gsb.setAuthInfo(authInfoJoe); + gsb.getBusinessKey().add(saveBusiness.getBusinessEntity().get(0).getBusinessKey()); + BusinessDetail businessDetail = inquiry.getBusinessDetail(gsb); + PrintUDDI printer = new PrintUDDI(); + System.out.println(printer.print(businessDetail.getBusinessEntity().get(0))); + AtomicReference msg = new AtomicReference(); + boolean b=ds.verifySignedUddiEntity(businessDetail.getBusinessEntity().get(0), msg); + Assert.assertTrue(msg.get(),b ); + Assert.assertTrue(msg.get()==null || msg.get().length()==0); + + } catch (Exception ex) { + logger.error("unExpected failure: ", ex); + Assert.fail("unexpected failure"); + } + } } Index: uddi-ws/src/main/java/org/w3/_2000/_09/xmldsig_/X509DataType.java =================================================================== --- uddi-ws/src/main/java/org/w3/_2000/_09/xmldsig_/X509DataType.java (revision 1542619) +++ uddi-ws/src/main/java/org/w3/_2000/_09/xmldsig_/X509DataType.java (working copy) @@ -26,6 +26,7 @@ import javax.xml.bind.annotation.XmlAnyElement; import javax.xml.bind.annotation.XmlElementRef; import javax.xml.bind.annotation.XmlElementRefs; +import javax.xml.bind.annotation.XmlSeeAlso; import javax.xml.bind.annotation.XmlType; import org.w3c.dom.Element; @@ -60,6 +61,7 @@ @XmlType(name = "X509DataType", propOrder = { "x509IssuerSerialOrX509SKIOrX509SubjectName" }) +@XmlSeeAlso({X509IssuerSerialType.class}) public class X509DataType { @XmlElementRefs({