是否可以同时运行单个@WebService bean作为安全和不安全的方式,最好使用除http/https协议差异之外的相同URL?
我可以使用以下方法运行安全或不安全的服务:
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
Run Code Online (Sandbox Code Playgroud)
要么
<transport-guarantee>NONE</transport-guarantee>
Run Code Online (Sandbox Code Playgroud)
在sun-ejb-jar.xml里面
IE浏览器.
<ejb>
<ejb-name>MyEJB</ejb-name>
<webservice-endpoint>
<port-component-name>MyWebService</port-component-name>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</webservice-endpoint>
</ejb>
Run Code Online (Sandbox Code Playgroud)
建议?
由于WS客户端服务和端口的初始化需要很长时间,所以我喜欢在启动时初始化它们并重用相同的端口实例.初始化看起来像这样:
private static RequestContext requestContext = null;
static
{
MyService service = new MyService();
MyPort myPort = service.getMyServicePort();
Map<String, Object> requestContextMap = ((BindingProvider) myPort).getRequestContext();
requestContextMap = ((BindingProvider)myPort).getRequestContext();
requestContextMap.put(BindingProvider.USERNAME_PROPERTY, uName);
requestContextMap.put(BindingProvider.PASSWORD_PROPERTY, pWord);
rc = new RequestContext();
rc.setApplication("test");
rc.setUserId("test");
}
Run Code Online (Sandbox Code Playgroud)
我班上某个地方的电话:
myPort.someFunctionCall(requestContext, "someValue");
Run Code Online (Sandbox Code Playgroud)
我的问题:这个调用是否是线程安全的?
我们使用"从Java开始"方法使用Metro 1.5堆栈创建JAX-WS 2.0 Web服务.当我们在其中一个Web服务上指向SoapUI等标准工具时,它表明WebMethods的参数是可选的.生成的xsd显示minOccurs = 0.
我需要一种方法来使"从Java开始"方法中需要WebMethod参数(在xsd中可能是minOccurs = 1).我认为这有一个Java注释,但我找不到一个.XmlElement注释具有必需属性,但XmlElement不能应用于WebMethod参数.
有没有办法使我的WebMethod参数成为必需,没有手动编辑xsd并将minOccurs设置为1?
Java的JAX-WS和Metro有什么区别?它们是两个不同的JAX-WS实现相同吗?
根据我的研究,JAX-WS已经是JDK 6的一部分.但是,JAX-WS没有附带标准的JDK包,所以我找了一个Java EE jar.但是,似乎Oracle不承载已编译的Java EE jar,而是提供Glassfish作为Java EE服务器.
我能够在Glassfish上运行我的Web服务.Glassfish使用什么JAX-WS实现?由于它是托管在Oracle上的,我假设它使用Java的JAX-WS实现,它应该是JDK 1.6的一部分?我的假设是正确的吗?此外,要运行基于JAX-WS的Web服务,我需要下载JAX-WS jar.我找到了Metro.但在它的页面上,我看到地铁的链接是Glassfish的子链接.所以我现在很困惑.Glassfish使用Metro吗?或者Glassfish使用Java的JAX-WS?
Metro和Java的JAX-WS是一样的吗?
我的WFC服务使用wsHttpBinding配置:
<security mode="TransportWithMessageCredential">
<message establishSecurityContext="True" clientCredentialType="UserName"/>
<transport clientCredentialType="None" proxyCredentialType="None"/>
</security>
Run Code Online (Sandbox Code Playgroud)
我们的合作伙伴之一是尝试使用java Metro库来调用我们的服务.他们有这个问题.我必须设置establishSecurityContext ="False"才能生效.我们进行了快速测试,当我将其设置为false时,它确实有效.
不使用安全会话会产生什么影响(通过设置establishSecurityContext ="False").我已经在https上运行了.那么我在安全性方面会好吗?是否还有其他需要考虑的影响(性能可能)?
谢谢
例如,我有一个导入另一个模式的简单模式.第二个模式(urn:just:attributes,just-attributes.xsd)只定义了一个属性组.
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/MySchema"
xmlns:tns="http://www.example.org/MySchema"
elementFormDefault="qualified"
xmlns:ja="urn:just:attributes">
<import schemaLocation="just-attributes.xsd" namespace="urn:just:attributes"/>
<element name="MyElement">
<complexType>
<attributeGroup ref="ja:AttributeGroup"/>
</complexType>
</element>
</schema>
Run Code Online (Sandbox Code Playgroud)
我正在使用Metro xjc Ant任务来生成此模式的类.我遇到的问题是我正在与之交互的第三方应用程序是名称空间特有的.这种情况我需要一个String值,所以我必须序列化它.我使用样板代码.
private static <T> String marshal(T object) throws JAXBException{
OutputStream outputStream = new ByteArrayOutputStream();
JAXBContext jaxbContext = JAXBContext.newInstance(object.getClass());
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.marshal(object, outputStream);
return outputStream.toString();
}
Run Code Online (Sandbox Code Playgroud)
这给了我一些东西
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:MyElement xmlns:ns1="urn:just:attributes" xmlns:ns2="http://www.example.org/MySchema" ns1:attrib1="1234" ns1:attrib2="5678"/>
Run Code Online (Sandbox Code Playgroud)
我xmlns:thirdpartyns="urn:just:attributes"遇到的问题是这个第三方需要类似的东西,也就是说,它们是根据命名空间的名称进行解析.它已经是"thirdpartyns"为他们的软件工作.
有没有人知道如何解决这个问题,而不是在结果字符串中进行查找和替换?也许是自定义绑定规则?
我想知道在哪里可以获得看起来像WPF的Windows(或MetroTwit)的Zune应用程序的主题.
我谷歌它但我只得到Silverlight 4的主题,而不是WPF.
我们正在开发自10年以来开发的业务应用程序(100万+ LOC).在切换到JDK8时,我们遇到了JDK8的元空间问题.这似乎与com.sun.xml.ws:webservices-rt:1.4(Metro 1.4)中引用的JaxB-Version有关.由于应用程序中的密切链接以及通过JaxB创建类/实例的传统,因此动态切换旧库并不简单.
目前我们正在研究这个问题.我们创建了一个重现此行为的示例程序:
import java.io.ByteArrayInputStream;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class X
{
private static final String XML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><x test=\"test\" />";
@XmlAttribute
String test;
public static void main( String[] args ) throws JAXBException, InterruptedException
{
System.out.println("start");
while ( true )
{
JAXBContext jc = JAXBContext.newInstance( X.class );
Unmarshaller unmarshaller = jc.createUnmarshaller();
X object = (X) unmarshaller.unmarshal( new ByteArrayInputStream( XML.getBytes() ) );
System.out.println( object.test );
}
}
}
Run Code Online (Sandbox Code Playgroud)
JDK7使PermGenSpace保持干净.(用16M PermGen模拟) …
由于WS客户端端口的初始化成本太高,我们希望重用相同的实例.我们还希望在每次调用之前在BindingProvider/RequestContext中设置不同的值.最初我们想这样做:
MyService service = new MyService(wsdlURL, name);
MyPort myPort = service .getMyServicePort();
Run Code Online (Sandbox Code Playgroud)
然后,在每次调用之前执行此操作:
Map requestContext = ((BindingProvider)myPort ).getRequestContext();
requestContext.put(BindingProvider.USERNAME_PROPERTY, uName);
requestContext.put(BindingProvider.PASSWORD_PROPERTY, pWord);
myPort.someFunctionCall();
Run Code Online (Sandbox Code Playgroud)
我的问题是,这个代码线程安全吗?JAX-WS文档似乎表明它不是线程安全的.但是,如果采取预防措施,CXF似乎也是如此.如果特别是JAX-WS和Metro不是线程安全的,有没有办法确保线程安全而不同步访问端口或ws操作?
我需要实现一个jax-ws客户端.
以下是提供者文档关于安全性的内容
目前,我们在http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0.pdf上使用SOAP Message Security 1.0版规范.
本标准使用另外两个来自W3C规范:
XMLENC(http://www.w3.org/TR/2002/REC-xmlenc-core-20021210/)
和XMLDSIG(http://www.w3.org/TR/2002)/REC-xmldsig-core-20020212 /)对于签名,使用指定X509的"URI"和"valueType"的直接"引用"的"SecurityTokenReference"是强制性的.对于加密,我们也推荐它,但我们也按优先顺序支持对keyIdentifier,X509IssuerSerial或keyName的引用.
加密和签名的块必须是"body"标记.
我们建议使用:"rsa-sha1"用于签名,"rsa-1_5"用于加密密钥,"tripledes-cbc"用于加密正文.
所以我提出了以下政策(从netbeans生成).但是......我看起来并不合适.Web服务尚无法访问,但我不确定规范版本是否匹配.我在这个问题上看了很多,但我仍然有些困惑.这个政策看起来不错吗?
<wsp1:Policy wsu:Id="ListeOperationsPeriodeSoapBindingSoapPolicy">
<wsp1:ExactlyOne>
<wsp1:All>
<sp:TransportBinding>
<wsp1:Policy>
<sp:TransportToken>
<wsp1:Policy>
<sp:HttpsToken RequireClientCertificate="false"/>
</wsp1:Policy>
</sp:TransportToken>
<sp:Layout>
<wsp1:Policy>
<sp:Lax/>
</wsp1:Policy>
</sp:Layout>
<sp:AlgorithmSuite>
<wsp1:Policy>
<sp:TripleDesRsa15/>
</wsp1:Policy>
</sp:AlgorithmSuite>
</wsp1:Policy>
</sp:TransportBinding>
<sp:Wss10/>
<sp:EndorsingSupportingTokens>
<wsp1:Policy>
<sp:X509Token sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
<wsp1:Policy>
<sp:WssX509V3Token10/>
</wsp1:Policy>
</sp:X509Token>
</wsp1:Policy>
</sp:EndorsingSupportingTokens>
</wsp1:All>
</wsp1:ExactlyOne>
</wsp1:Policy>
<wsp:Policy wsu:Id="ListeOperationsPeriodeSoapBindingSoap_perform_Input_Policy">
<wsp:ExactlyOne>
<wsp:All>
<sp1:SignedEncryptedSupportingTokens>
<wsp:Policy>
<sp1:X509Token sp1:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
<wsp:Policy>
<sp1:WssX509V3Token10/>
</wsp:Policy>
</sp1:X509Token>
</wsp:Policy>
</sp1:SignedEncryptedSupportingTokens>
</wsp:All>
</wsp:ExactlyOne>
</wsp:Policy>
Run Code Online (Sandbox Code Playgroud)
编辑:我无法用wsit发送预期的消息.例如,使用Netbeans向导,如果不使用寻址,我无法获得加密的标头.这应该是可能的吗?
我用一个旧的轴1类和wss4j攻击了一些东西,它有效,但它很难看,而且我宁愿使用更具前瞻性的东西.